linux find命令返回的条目的默认排序顺序是什么?
例如,如果我发出
find . -type f -name '*mp3'
并且输出由跨多个子文件夹的多个文件组成,列出目录的默认顺序是什么?同时,列出单个目录中文件的排序顺序是什么?
有时它返回:
./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3
查看如何首先列出目录B的内容,然后列出目录A的内容。同时,在目录A中,文件以有趣的顺序列出。
-s按字母顺序对输出进行排序的参数。
linux find命令返回的条目的默认排序顺序是什么?
例如,如果我发出
find . -type f -name '*mp3'
并且输出由跨多个子文件夹的多个文件组成,列出目录的默认顺序是什么?同时,列出单个目录中文件的排序顺序是什么?
有时它返回:
./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3
查看如何首先列出目录B的内容,然后列出目录A的内容。同时,在目录A中,文件以有趣的顺序列出。
-s按字母顺序对输出进行排序的参数。
Answers:
find将遍历目录树中的订单项存储在目录条目中。(在大多数情况下)这在同一台计算机上每次运行都将保持一致,并且如果没有删除,则基本上是“文件/目录创建顺序”。
但是,某些文件系统将在压缩操作的一部分或需要扩展条目大小的情况下对目录条目进行重新排序,因此“原始”顺序随时间变化的可能性很小。如果需要一致的顺序,请通过额外的排序阶段来提供输出。
find /path/ -exec ...以更快的速度运行find /path/以首先获取文件的排序列表。
您不应依赖于特定的输出顺序find,而应使用sort和其他方式来具体控制该顺序。
我分别从1984/1991开始从事UNIX / Linux的工作,并且找到了我所教的第一个命令。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
在日期/时间字符串中不包含字符的另一种方法是。
示例日期/时间:20160917120013.8101685040
find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n