find命令的默认sorting顺序

linux find命令返回的条目的默认sorting顺序是什么?

例如,如果我发出

find . -type f -name '*mp3' 

并且输出由多个子文件夹中的多个文件组成,目录的默认排列顺序是什么? 同时,列出单个目录中的文件的sorting顺序是什么?

有时会返回:

 ./B/01.mp3 ./A/01.mp3 ./A/04.mp3 ./A/02.mp3 

看看目录B的内容是如何首先列出的,然后是目录A的内容。同时在目录A中,文件以有趣的顺序列出。

find将遍历目录树中的项目存储在目录项中的顺序。 这将(主要)从运行到运行一致,在同一台机器上,如果没有删除,实质上就是“文件/目录创build顺序”。

但是,一些文件系统会重新排列目录条目,作为压缩操作的一部分,或者当条目的大小需要扩展时,所以“原始”订单总是会随着时间而改变。 如果您想要一致的订单,请通过额外的分拣阶段提供输出。

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

自1984/1991以来,我一直在UNIX / Linux上工作,我教的第一个命令是find的。 Linux / GNU已经把你需要的所有东西都放到了当前的find命令中,所以你可以使用它。

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

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

    find / path -ls | sorting-k11

  2. 如果您希望按date/时间按照升序或降序排列,请使用-printf“”选项进行更精细的粒度控制。 有关更多详细信息,请参阅手册,但以下示例将以小数秒打印,因此非常准确。

举例date/时间: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 

另一种在date/时间string中没有字符的方法是。

示例date/时间:20160917120013.8101685040

 find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n