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

Dec*_*ard 24 ls

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

我发现了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
Run Code Online (Sandbox Code Playgroud)

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

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

Rol*_*der 22

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

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

find . -type f -printf "%T@ %f\n" | sort -n > out.txt
Run Code Online (Sandbox Code Playgroud)

  • 您可能需要完整的日期/时间,不仅需要文件名,还需要输出中的路径,在这种情况下,请修改格式字符串:`find 。-type f -printf "%T@ %Tc %p\n" | sort -n > out.txt` 产生输出条目,如 `1427913836.2330520210 wed 1 apr 2015 20:43:56 ./subdir/file.txt`。 (10认同)

jay*_*ngh 18

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

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

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

ls -lRt

如果您不需要列出的所有其他东西,ls那么您可以使用 -

ls -1Rt

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

ls -lRt > sortedfile.list

更新:

find . -type f -exec ls -lt {} +
Run Code Online (Sandbox Code Playgroud)

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

find . -type f -exec ls -lrt {} +
Run Code Online (Sandbox Code Playgroud)

  • 如果文件列表足够长以强制 `xargs` 多次调用 `ls`,这将失败,因为这样文件只会在每次 `ls` 调用中正确排序,但在输出中缺乏一致的全局顺序。 (2认同)