如何以反向时间顺序列出目录和子目录中的所有文件?

时间:2011-02-05 21:23:36

标签: unix find ls

我想做ls -t之类的事情,但也包含子目录中的文件。但问题是我不希望像ls -R那样形成输出,这是这样的:

[test]$ ls -Rt
b       testdir test

./testdir:
a

我希望它的格式就像find命令显示子目录中的文件一样。即:

[test]$ find .
.
./b
./test
./testdir
./testdir/a

但是find似乎没有做的是按照上次更新时间按时间顺序排序结果。

那么如何以find的格式列出目录和子目录中的所有文件,但是按时间倒序排列?

7 个答案:

答案 0 :(得分:76)

ls -lR用于显示主目录中的所有文件,目录和子目录 ls -lR | more用于显示流中的所有文件。

答案 1 :(得分:36)

试试这个:

find . -type f -printf "%T@ %p\n" | sort -nr | cut -d\  -f2-

答案 2 :(得分:9)

如果你想要查看的文件数量符合最大参数限制,你可以使用globbing来获得你想要的东西,如果你有globstar支持,可以使用递归。

对于2层深度使用:ls -d * */*

使用globstar,用于递归:ls -d **/*

-d的{​​{1}}参数告诉它不要递归作为参数传递的目录(因为你使用shell globbing来进行递归)。这可以防止ls使用其递归格式。

答案 3 :(得分:3)

find -type f -print0 | xargs -0 ls -t

缺点:仅适用于一定数量的文件。如果你有大量的文件,你需要更复杂的东西

答案 4 :(得分:3)

尝试 find . -type d 要么 find . -type d -ls

答案 5 :(得分:2)

试试这个:

ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total' |sed '/^$/d'

答案 6 :(得分:1)

wfg5475's answer中的命令工作正常,只需要添加一个东西来显示目录中的文件&子目录:

ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total|^d' |sed '/^$/d'

添加了一件事:^d忽略列表输出中的所有目录