2012-09-20 49 views
3

文件的任何随机列表寻找通用的方法如何排序的修改时间的文件的随机列表,所以像:排序方式修改日期

./make_list_of_files | some_sorter_by_mtime 

我当期的解决方案是(这里的make_list_of_filesfind命令):

find/-type f -print |\ 
    perl -nle 'push @in,$_;END {@out = sort{ (stat($a))[9] <=> (stat($b))[9] } @in; $,="\n";print @out}' 

存在一些简单的解决方案(例如,没有perl的)?

回答

6

some_sorter_by_mtime应该例如:

xargs stat -f "%m %N" | sort -n | cut -f2- 

背后的想法是:

  • 打印出的文件修改时间和文件名
  • 排序输出数值(因此通过修改时间)
  • 剪出时间字段

所以,

find/-type f -print | xargs stat -f "%m %N" | sort -n | cut -f2- 
+0

接受!这很好,很短... thanx。 – kobame

+0

这比我以前的解决方案更快。我看到emix的解决方案后,编辑了我的答案,并偷走了xargs;) – jm666

-2

是的,没有的Perl:

find/-type f -exec ls -lrt '{}' \+ 

大师。

+0

这会有意想不到的效果作为'ls'命令行是有限的长度,并且ls'的'多次调用将仅在每个单独的调用文件进行排序。此外,这不是“通过修改时间对_random_文件列表进行排序的通用方法”。 – lanzz

+0

@lanzz谢谢你的评论。你的英语对于问题的解释要好得多。 ;) – kobame

2

喜欢这个?

find/-type f -print | xargs ls -l --time-style=full-iso | sort -k6 -k7 | sed 's/^.* \//\//' 
+0

不幸的是,我的'ls'没有--time-style参数,但YES,这看起来是一个非常好的解决方案。 – kobame