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在自己递归时如何对目录进行排序?”至少会,要足够具体,成为一个可以回答的问题。