1

我正在寻找单行 shell 脚本或 unix 命令来在目录树中查找最新的 500 个文件。主要限制是它应该符合 POSIX 并且目录可以包含大量文件。

4

5 回答 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

这个怎么样:

Posix lshead

ls -tc DIR | head -n 500
于 2012-06-01T18:17:14.730 回答
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 回答