查找目录树中最新500个文件的命令,并且还符合POSIX标准

时间:2012-06-01 18:09:39

标签: perl shell unix xargs

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

5 个答案:

答案 0 :(得分:1)

这个怎么样:

Posix lshead

ls -tc DIR | head -n 500

答案 1 :(得分:1)

我从下面的链接中找到了一个帮助的perl脚本:

find . -type f -print | perl -l -ne ' $_{$_} = -M; END {  $,="\n";   print sort {$_{$b} <=> $_{$a}} keys %_   }' | head -n 500

How to recursively find and list the latest modified files in a directory with subdirectories and times?

更多欢迎评论。谢谢。

答案 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方式,也可能根本没有解决方案,具体取决于所使用的文件系统。