我正在寻找单行 shell 脚本或 unix 命令来在目录树中查找最新的 500 个文件。主要限制是它应该符合 POSIX 并且目录可以包含大量文件。
问问题
417 次
5 回答
2
我从下面的链接中找到了一个 perl 脚本,它有帮助:
find . -type f -print | perl -l -ne ' $_{$_} = -M; END { $,="\n"; print sort {$_{$b} <=> $_{$a}} keys %_ }' | head -n 500
欢迎更多评论。谢谢大家。
于 2012-06-04T13:27:49.773 回答
1
寻找 。-type f -print | perl -l -ne ' $ {$ } = -M; END { $,="\n"; 打印排序 {$ {$b} <=> $ {$a}} 键 %_ }' | 头-n 500
对于排序 $ {$a} <=> $ {$b}应该是相反的
头部可以避开:print+(...)[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
于 2012-06-13T20:23:06.937 回答
0
find . -type f -exec stat -c %Y:%n {} \; |
sort -rn | sed -e 's/.*://' -e 500q
这对 ctime 进行排序,可以通过使用%Z
或%X
在格式字符串中进行更改,但stat
不是 POSIX。
于 2012-06-01T18:49:26.937 回答
0
使用 shell 脚本没有 100% 可靠的 POSIX 方法。
一个 POSIX C 程序会很容易做到这一点,假设您通过最后修改的文件内容或最后更改的文件定义最新的。如果您指的是上次创建时间,则没有 POSIX 方式,也可能根本没有解决方案,具体取决于所使用的文件系统。
于 2012-06-04T08:21:58.930 回答