Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 控制du排序_Shell_Du - Fatal编程技术网

Shell 控制du排序

Shell 控制du排序,shell,du,Shell,Du,短版本;如何控制du扫描目录的顺序 注意:之后的排序是不够的,我需要更改du扫描的顺序,而不是结果的顺序 一点背景知识;我有一个简单的基于rsync的备份,在一个目录中有一堆快照,所有快照都按创建日期/时间命名 因此,示例可能如下所示: 2019-08 2019-09 2019-09-20 2019-09-21 2019-09-23-161447 2019-09-23-172658 i、 e-我把hourlies(在末尾),折叠成日报(中间),然后最终折叠成月刊(顶部),效果很好,因为它们与l

短版本;如何控制
du
扫描目录的顺序

注意:之后的排序是不够的,我需要更改
du
扫描的顺序,而不是结果的顺序

一点背景知识;我有一个简单的基于rsync的备份,在一个目录中有一堆快照,所有快照都按创建日期/时间命名

因此,示例可能如下所示:

2019-08
2019-09
2019-09-20
2019-09-21
2019-09-23-161447
2019-09-23-172658
i、 e-我把hourlies(在末尾),折叠成日报(中间),然后最终折叠成月刊(顶部),效果很好,因为它们与
ls
的自然排序配合得很好

然而,问题是,当我运行
du.
时,顺序是不可预测的,或者至少,顺序不同(从最早到最新),因此结果没有我想要的有用;有时,我会在每月之前每天甚至每小时扫描一次,而且订单有时只与我想要的相符

理想情况下,我希望
du
始终从最早的快照到最新的快照进行评估,因为这样
du
会将所有后续快照的大小作为大小差/delta(因为未更改的文件是硬链接的,所以它只计算后续快照的更改)


是否可以强制对
du
扫描目录的顺序进行自然排序?

出于某种原因,我没有想到,如果我只是将所有快照作为参数传递,那么
du
仍将忽略其他硬链接,因此在我的情况下,可能的答案是执行以下操作:

du-sh/path/to/snapshots/*-*

由于我的父目录不包含带有连字符的其他条目,因此这将扩展到其中的每个快照,并且似乎是按自然排序顺序给出的。根据您自己的用例的相似程度,您可能需要调整模式,或者以其他方式获取列表


在我把这个答案标记为正确之前,我能请人确认一下吗;这是订购快照的可靠方法吗?它似乎给了我一个自然的排序顺序,但我还没有找到一个来源来确认是否总是这样。如果它不可靠,或者即使可靠,还有其他/更灵活的替代方案吗?

如果您的排序顺序(
LC\u COLLATE
)已知,则全局排序是定义良好的。不知道您是否让
du
自行递归,而不是在命令行上获得特定目录的列表,除了你,我不知道怎么会有人回答这个问题。当然,这个问题暗示是
du
,而不是调用shell,决定了您想要更改的顺序。(如果你展示了手头的命令行用法,那就足够清楚地覆盖了这一含义)。@CharlesDuffy我在我的问题中特别说明了
du.
(即-
du
当前目录)的用法。啊。然后答案是“否”,或者更确切地说,“将源代码读入您的特定实现”(因为
du
不是POSIX标准化工具,没有实现的通用规范)…一般来说,任何未定义顺序的地方都只使用
readdir()
syscall,依靠操作系统以文件系统使用的顺序反馈信息——这通常是特定文件系统的实现细节,并且会因目录项的散列/排序方式等而异。“GNU du v1.2.3在自己递归时如何对目录进行排序?”至少会,要足够具体,成为一个可以回答的问题。