我正在寻找单行shell脚本或unix命令来查找目录树中的最新500个文件。主要限制是它应该符合POSIX标准,并且目录可以包含大量文件。
答案 0 :(得分:1)
答案 1 :(得分:1)
我从下面的链接中找到了一个帮助的perl脚本:
find . -type f -print | perl -l -ne ' $_{$_} = -M; END { $,="\n"; print sort {$_{$b} <=> $_{$a}} keys %_ }' | head -n 500
更多欢迎评论。谢谢。
答案 2 :(得分:1)
找到。 -type f -print | perl -l -ne'$ {$ } = -M;结束{$,=“\ n”;打印排序{$ {$ b}&lt; =&gt; $ {$ a}}键%_}'|头-n 500
排序$ {$ a}&lt; =&gt;应该相反。 $ {$ B}
可以避免头部:打印+(...)[0..499]
使用递归调用查找:
perl -e 'sub R{($_)=@_;map{-d$_?&R($_):$_}<$_/*>}print$_,$/for(sort{-M$a<=>-M$b}R".")[0..499]'
或者使用unix cmd:不确定是否有许多参数可能会失败
find . -type f -exec ls -1t {} + | head -500
find . -type f -print0 | xargs -0 ls -1t | head -500
答案 3 :(得分:0)
find . -type f -exec stat -c %Y:%n {} \; |
sort -rn | sed -e 's/.*://' -e 500q
对ctime进行排序,可以使用格式字符串中的%Z
或%X
进行更改,但stat
不是POSIX。
答案 4 :(得分:0)
使用shell脚本执行此操作没有100%可靠的POSIX方法。
POSIX C程序可以轻松完成,假设您通过上次修改的文件内容或上次更改的文件定义最新版本。如果您的意思是上次创建时间,则根本没有POSIX方式,也可能根本没有解决方案,具体取决于所使用的文件系统。