linux find 命令返回的条目的默认排序顺序是什么?
例如,如果我发出
find . -type f -name '*mp3'
Run Code Online (Sandbox Code Playgroud)
并且输出由多个子文件夹中的多个文件组成,列出目录的默认顺序是什么?同时,列出单个目录中的文件的排序顺序是什么?
有时它会返回:
./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3
Run Code Online (Sandbox Code Playgroud)
看看如何首先列出目录 B 的内容,然后是目录 A 的内容。同时在目录 A 中,文件以有趣的顺序列出。
Vat*_*ine 27
find将遍历目录树中的顺序项目存储在目录条目中。这将(大部分)在同一台机器上从运行到运行保持一致,并且如果没有删除,则本质上将是“文件/目录创建顺序”。
然而,一些文件系统会在压缩操作中重新排序目录条目,或者当条目的大小需要扩展时,所以“原始”顺序总是有很小的机会随着时间的推移而改变。如果您想要一致的顺序,请通过额外的排序阶段提供输出。
小智 9
自 1984/1991 年以来,我一直在 UNIX/Linux 中工作,我学到的第一个命令是 find。Linux/GNU 已经将您需要的几乎所有东西都放入了当前的 find 命令中,所以请随意使用它。
以下是对查找输出进行排序的一些有用提示。-printf 选项为您提供了许多选项来启用更复杂的排序和文件信息显示。这是解决此类问题的最佳选择。玩它看看什么对你有用。使用 -printf 您可以按照您想要的方式自定义和分隔结果。当您需要对结果进行后期处理时,这会很有帮助。我希望这可以帮助别人。
如果您使用 -ls 并希望按文件名排序,则第 11 个字段是文件名,因此您可以执行以下操作。sort -k 选项也可以使用多个字段进行排序。
查找 /path -ls | 排序 -k11
如果您希望按日期/时间按升序或降序进行更精细的控制,请使用 -printf "" 选项。有关更多详细信息,请参阅手册,但以下示例将打印小数秒,因此非常准确。
示例日期/时间:2016-09-17+12:09:57.9013929800
find /path -printf "%T+ %p\n" | sort -n # Ascending
find /path -printf "%T+ %p\n" | sort -nr # Descending
Run Code Online (Sandbox Code Playgroud)
在日期/时间字符串中没有字符的另一种方法是。
示例日期/时间:20160917120013.8101685040
find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n
Run Code Online (Sandbox Code Playgroud)