2012-03-08 136 views
21

我想构建一个Linux命令,以列出特定目录(和子目录)中的所有文件(及其完整路径)按访问时间排序。列出目录(和子目录)中的所有文件(包含完整路径),按访问时间排序

ls可以按访问时间排序,但不会给出完整路径。查找给出了完整路径,但是对访问时间的唯一控制是使用-atime N(至少在24 * N小时前访问)指定范围,这不是我想要的范围。

有没有办法按访问时间排序并获得完整路径?我只能编写一个脚本,但似乎应该有一种方法可以用标准的Linux程序来完成。

回答

20
find . -type f -exec ls -l {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7 

这将找到的所有文件,并通过日期,然后时间排序。然后,您可以使用awkcutls -l输出

+0

工作得很好。我认为这不受getconf ARG_MAX的限制? – Andrew 2012-03-10 00:04:51

+0

没错,它不受ARG_MAX的限制,因为它不会将它作为参数传递,而是用管道输出。程序之间可以传输多少数据没有限制。 – Alex 2012-03-11 17:22:01

+0

太棒了!谢了哥们!很好的了解这个限制,因为我的目录中有很多很多文件。 – Andrew 2012-03-12 12:16:40

11

你可以尝试:

ls -l $(find /foo/bar -type f) 
  • 你可以添加其他选项(例如-t排序),以ls命令来实现你的目标。
  • 还可以添加你的搜索条件来find CMD
+1

我稍微修改这一点,得到了正是我想 LS -ult $(找不到目录型的F)| grep -o“[^] \ + $” 谢谢! – Andrew 2012-03-08 17:09:20

+2

请记住,因为'$(find DIRECTORY -type f)'的输出被用作'ls -ult'的命令行参数,所以您将被限制为'getconf ARG_MAX'文件 – Alex 2012-03-08 17:57:41

+0

感谢您的头像亚历克斯! – Andrew 2012-03-09 10:08:59

3

find . -type f | xargs ls -ldt提取日期,文件名应该做的伎俩只要不是你撞的命令一样的参数限制和产卵LS的2个实例这么多的文件。

1
find . -type f -exec ls -l --full-time {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7 

亚历克斯的答案没有为我工作,因为我有超过一年的文件和排序搞砸了。上面添加了--full-time参数,它将日期/时间值核心化,并使它们可排序而不管它们多大。

+0

'--full-time'参数在Mac OS X中不存在。@ Kent的解决方案效果很好。 – 2013-09-04 19:38:47

1
pwd | xargs -I % find % -type f 
相关问题