如何以反向时间顺序列出目录和子目录中的所有文件?
我想做一些像ls -t
这样的东西,但是也要包含子目录中的文件。 但是问题是我不想像ls -R
那样把输出格式化,就是这样:
[test]$ ls -Rt b testdir test ./testdir: a
我希望它被格式化为find
命令显示子目录中的文件。 即:
[test]$ find . . ./b ./test ./testdir ./testdir/a
但是,似乎没有find
是按照时间顺序按上次更新时间sorting。
那么我怎么能列出目录和子目录中的所有文件,格式是find
,但是按照反向时间顺序?
试试这个:
find . -type f -printf "%T@ %p\n" | sort -nr | cut -d\ -f2-
ls -lR
是显示主目录ls -lR | more
所有文件,目录和子目录 ls -lR | more
用于显示stream中的所有文件。
如果您要查看的文件数量符合最大参数限制,则可以使用globbing来获得所需内容,如果您有globstar支持,则使用recursion方式。
正好2层深: ls -d * */*
使用globstar,recursion使用: ls -d **/*
ls
的-d
参数告诉它不要recursion作为parameter passing的目录(因为你正在使用shell通配符来执行recursion)。 这可以防止ls
使用recursion格式。
find -type f -print0 | xargs -0 ls -t
缺点:只适用于一定数量的文件。 如果文件数量极其庞大,则需要更复杂的文件
试试find . -type d
find . -type d
或find . -type d -ls
find . -type d -ls
尝试这个:
ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total' |sed '/^$/d'
在wfg5475的答案中的命令是正常工作,只需要添加一件事情,只显示目录&子目录中的文件:
ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total|^d' |sed '/^$/d'
增加了一件事情: ^d
忽略列表输出中的所有目录