Bash/Shell:按 ctime 获取目录中最新文件的列表,对每个文件进行排序并仅检索 3 个

Bash/Shell:按 ctime 获取目录中最新文件的列表,对每个文件进行排序并仅检索 3 个

我在目录中有以下文件:

trunk_rev.94564.zip
trunk_rev.94565.zip
trunk_rev.94566.zip
trunk_rev.94567.zip
trunk_rev.94568.zip
trunk_rev.94569.zip
v15_rev.94560.zip
v15_rev.94561.zip
v15_rev.94562.zip
v15_rev.94563.zip
v15_rev.94564.zip

我如何才能获得每个模式的 N 个(例如 3 个)按 ctime 排序的最新文件列表?文件名可能不同。例如:

trunk_rev.94567.zip
trunk_rev.94568.zip
trunk_rev.94569.zip
v15_rev.94562.zip
v15_rev.94563.zip
v15_rev.94564.zip
<some_another_file>.zip
<some_another_file>.zip
<some_another_file>.zip

提前致谢!

答案1

尝试一下:

ls -1rt | awk 'BEGIN { FS="."; OFS="."; } { if (count[$1]<3) { count[$1]++; filenames[i++]=$0; } } END { for ( i in filenames ) { printf("%s\n",filenames[i]); } }'

文件将仅按 ctime 顺序列出。

要按 ctime 和名称分组列出它们,请添加种类命令:

ls -1rt | awk 'BEGIN { FS="."; OFS="."; } { if (count[$1]<3) { count[$1]++; filenames[i++]=$0; } } END { for ( i in filenames ) { printf("%s\n",filenames[i]); } }' | sort -t . -k 1,1

答案2

你应该阅读ls在此刻:

-c 与 -lt 一起:按 ctime(文件状态信息的最后修改时间)排序并显示;与 -l 一起:显示 ctime 并按名称排序;其他方式:按 ctime 排序,最新的优先

和手册,如果您还不熟悉它。

答案3

请尝试以下操作:

ls -l --time-style=full-iso | sort -k6 | tail -n3

相关内容