我在目录中有以下文件:
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