想要按更新日期对文件(包括子目录)进行排序

想要按更新日期对文件(包括子目录)进行排序

我只想按更新日期对文件(包括子目录)进行排序。

我发现ls -lrtR | grep ^-。但它似乎不按更新日期排序。

我需要将此列表保存到文件中。是否可以?

Apr 01 2010  InsideDoosanServiceImpl.class  // in A directory
Apr 08 2010  MainController.class  // in B directory
Apr 07 2010  RecommendController.class  // in B directory
Apr 01 2010  MainDao.class  // in B directory

我的意思是整个列表不是按日期排序的,而是先按文件夹排序,然后按日期排序。

我想要一个首先按日期排序的列表,包括所有子目录。

答案1

使用 ls,-R 将递归目录,-t 将按修改进行排序。但是,它递归地遍历目录并将 -t 应用于每个目录。它不会累积所有目录中的所有文件然后进行排序。 (据我了解,后者就是你想要的)

使用 gnu find(1),您可以指定输出格式以包括自纪元以来的秒数和文件名,然后您可以将其通过管道传递给 sort(1)。

find . -type f -printf "%T@ %f\n" | sort -n > out.txt

答案2

我不确定你到底是什么意思update dates,但你正在使用-r根据 man 所做的选项 -

-r 反转排序顺序以获取反向字典顺序或首先获取最旧的条目(或最后获取最大的文件,如果与按大小排序结合使用)

我认为如果您需要按时间排序的文件,这对您来说应该足够了。

ls -lRt

如果您不需要列出的所有其他内容,ls您可以使用 -

ls -1Rt

要将结果捕获到文件中,您可以使用重定向运算符>并指定文件名。所以你可以做这样的事情 -

ls -lRt > sortedfile.list

更新:

find . -type f -exec ls -lt {} +

这将对文件进行排序,以便首先列出最新的文件。要反转排序顺序,在末尾显示最新文件,请使用以下命令:

find . -type f -exec ls -lrt {} +

相关内容