给定文件名列表,如何按文件修改时间对其进行排序?
最终的输出需要看起来与输入完全一样,不同之处在于已对数据进行了相应的排序。
这是输入示例。
/jobs/crm/import/done/20140227-1359-0009.txt
/jobs/bridge/open-workitem/done/20140227-1359-0009.txt
/jobs/bridge/opened-workitem/done/20140227-1359-0009.txt
/jobs/bridge/update-workitem/done/20140227-1401-0001.txt
/jobs/bridge/update-workitem/done/20140227-1403-0001.txt
/jobs/tfs/import/done/20140227-1401-0001.txt
/jobs/tfs/import/done/20140227-1403-0001.txt
/jobs/tfs/open-workitem/done/20140227-1359-0009.txt
假设您输入的内容很小,并且文件名不包含空格或其他奇怪的字符,则可以使用ls
。
ls -dt $(cat files)
$(cat files)
将的内容files
放在命令行上,并将其拆分到空白处以获取参数列表。ls -t
将文件列表作为其参数,按mtime对其进行排序,然后进行打印。-d
是必需的,因此它使用名称而不是目录列出目录。
如果这还不够,您可以尝试装饰/排序/取消装饰模式,例如
$ while IFS=$'\n' read file; do
printf '%d %s\n' "$(stat -c +%Y "$file")" "$file"
done <files | sort -k1nr | cut -f 2- -d ' ' >files.sorted
其中,IFS=$'\n' read file; do ... done <files
套file
到每个新行分隔的条目files
依次printf...stat...
轮流<filename>
到<mtime> <filename>
,sort -k1nr
基于反向数字顺序的第一个字段排序线,然后cut
删除<mtime>
,让你只用<filename>
S IN有序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句