find 命令默认排序顺序

Nas*_*sko 43 linux shell find

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将遍历目录树中的顺序项目存储在目录条目中。这将(大部分)在同一台机器上从运行到运行保持一致,并且如果没有删除,则本质上将是“文件/目录创建顺序”。

然而,一些文件系统会在压缩操作中重新排序目录条目,或者当条目的大小需要扩展时,所以“原始”顺序总是有很小的机会随着时间的推移而改变。如果您想要一致的顺序,请通过额外的排序阶段提供输出。


Den*_*son 12

您不应该依赖于特定的输出顺序find,而应该使用sort和其他方法来专门控制顺序。


小智 9

自 1984/1991 年以来,我一直在 UNIX/Linux 中工作,我学到的第一个命令是 find。Linux/GNU 已经将您需要的几乎所有东西都放入了当前的 find 命令中,所以请随意使用它。

以下是对查找输出进行排序的一些有用提示。-printf 选项为您提供了许多选项来启用更复杂的排序和文件信息显示。这是解决此类问题的最佳选择。玩它看看什么对你有用。使用 -printf 您可以按照您想要的方式自定义和分隔结果。当您需要对结果进行后期处理时,这会很有帮助。我希望这可以帮助别人。

  1. 如果您使用 -ls 并希望按文件名排序,则第 11 个字段是文件名,因此您可以执行以下操作。sort -k 选项也可以使用多个字段进行排序。

    查找 /path -ls | 排序 -k11

  2. 如果您希望按日期/时间按升序或降序进行更精细的控制,请使用 -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)

  • 这并没有回答问题(“默认排序顺序是什么?”)。 (3认同)