unix 如何按时间倒序列出目录和子目录中的所有文件?

piok6c0g  于 2023-02-15  发布在  Unix
关注(0)|答案(8)|浏览(278)

我想做一些类似ls -t的事情,但是也包含了子目录中的文件,但是问题是我不想输出像ls -R那样的格式,它是这样的:

[test]$ ls -Rt
b       testdir test

./testdir:
a

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

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

但是find似乎没有按照最后更新时间对结果进行排序。
那么,如何以find的格式,但按时间倒序列出目录和子目录中的所有文件呢?

vd8tlhqk

vd8tlhqk1#

ls -lR用于显示当前目录下的所有文件、目录和子目录ls -lR | more用于显示一个流中的所有文件。

oewdyzsn

oewdyzsn2#

试试这个:

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

r55awzrz3#

如果你想查看的文件数量在最大参数限制之内,你可以使用globbing来获取你想要的,如果你有globstar支持,可以使用递归。
仅限2层深度用途:ls -d * */*
对于globstar,递归用途:ls -d **/*
ls-d参数告诉ls不要递归作为参数传递的目录(因为您使用shell全局匹配来执行递归),这阻止了ls使用其递归格式。

tkclm6bt

tkclm6bt4#

尝试find . -type dfind . -type d -ls

50pmv0ei

50pmv0ei5#

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

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

yv5phkfx

yv5phkfx6#

试试这个:

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

b0zn9rqh7#

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

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

补充一点:^d忽略列表输出中的所有目录

pgvzfuti

pgvzfuti8#

如果可以使用GUI,请尝试nautilus .,然后从搜索栏搜索。默认情况下,此搜索列出目录和子目录中的所有文件。但是,无法按时间倒序排序。

相关问题