find command for the newest 500 files in a directory tree and also be POSIX compliant
我正在寻找一个单行shell脚本或unix命令来查找目录树中最新的500个文件。主要的限制是它应该是符合POSIX的,并且目录可以有大量的文件。
find . -type f -print | perl -l -ne ' ${$} = -M; END { $,="
"; print sort {${$b} <=> ${$a}} keys %_ }' | head -n 500
它应该与排序$$A<=>$$B相反。
头部可以避免:print+(…)[0..499]
使用递归调用查找:
1 | perl -e 'sub R{($_)=@_;map{-d$_?&R($_):$_}<$_/*>}print$_,$/for(sort{-M$a<=>-M$b}R".")[0..499]' |
或者使用unix命令:不确定是否有to-many参数可能失败
1 2 |
我在下面的链接中发现了一个Perl脚本,它有助于:
1 2 | find . -type f -print | perl -l -ne ' $_{$_} = -M; END { $,=" "; print sort {$_{$b} <=> $_{$a}} keys %_ }' | head -n 500 |
如何在具有子目录和时间的目录中递归查找和列出最新修改的文件?
欢迎发表评论。谢谢大家。
这个怎么样?
POSIX LS和HEAD
1 | ls -tc DIR | head -n 500 |
对于shell脚本,没有100%可靠的POSIX方法可以做到这一点。
不过,POSIX C程序将很容易做到这一点,假设您通过最后修改的文件内容或最后更改的文件来定义最新的内容。如果您指的是最后一次创建时间,那么根据所使用的文件系统的不同,没有POSIX方式,也可能根本没有解决方案。
在ctime上进行排序,可以在格式字符串中使用