Command-Line
僅給定文件名,如何按時間對文件列表進行排序
給定文件名列表,如何按文件修改時間對其進行排序?
生成的輸出需要看起來與輸入完全相同,只是數據已相應排序。
這是輸入的範例。
/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
是必需的,因此它使用名稱而不是其內容列出目錄。如果這還不夠,您可以嘗試使用decorate/sort/undecorate 模式,例如
$ 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
where依次
IFS=$'\n' read file; do ... done <files
設置file
每個換行符分隔的條目files
,printf...stat...
變成,根據第一個欄位以相反的數字順序對行進行排序,然後<filename>
刪除,只留下s 排序順序。<mtime> <filename>``sort -k1nr``cut``<mtime>``<filename>