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


17

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

我发现了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

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

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

Answers:


12

我不确定您的确切意思是什么update dates,但是您正在使用的-r选项根据实际情况而定-

-r颠倒排序顺序以获得颠倒的字典顺序或最早的条目(或最后一个最大的文件,如果与按大小排序相结合)

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

ls -lRt

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

ls -1Rt

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

ls -lRt > sortedfile.list

更新:

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

我的意思是上次修改文件的时间是:)

排序结果按文件夹和日期排序。我想按日期和文件夹排序..可以吗?

对不起,您能告诉我一些输出吗?如果您使用过的话,我不太了解文件夹的排序方式ls -lrt
jaypal singh

// Jaypal Singh,我将输出更新为我的问题↑:)。我真的希望你能理解,并为我的英语不好对不起。

1
如果文件列表足够长而无法强制xargs对进行多次调用ls,则此操作将失败,因为这样仅在每次ls调用中对文件进行了正确排序,但输出中缺少一致的全局顺序。
布兰登·罗德斯

19

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

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

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

是的,GNU find确实有帮助。但是OP在AIX机器上工作,因此GNU find对他不可用。
jaypal singh 2012年

太糟糕了ls,无法在排序之前累积文件。与相比ls如此之快find
内森(Nathan Reinstate)莫妮卡·亚瑟(Monica Arthur),

lsfind读取相同的数据,因此我无法想象ls的任何原因都应该比find快得多。在我的系统上,查找速度快了5倍(搜索大约50万个文件)
Rolf Rander

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

大。那真的帮助了我。我一直在寻找一种方法来分类年龄的子目录!
bhu Boue vidya
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.