2015-10-23 255 views
-2

我需要在shell中执行以下命令;它会给出一个排序列表或不?在shell脚本中输出find命令

find -type f -exec ls -t {} \; 
+0

你为什么不测试这个?这个网站和互联网上的其他论坛在那里帮助那些至少证明他们试图解决问题的人。在发布问题时,https://stackoverflow.com/help/how-to-ask是任何公共论坛的良好指南。我建议的另一个更详细的文档是http://www.catb.org/esr/faqs/smart-questions.html。 – Bram

回答

1

这样写的是,ls命令与一个文件可以以任意顺序find碰巧遇到的名字,所以不会有任何有意义的时间顺序运行一次。

如果你有一个版本的find支持POSIX 2008 +符号,那么你可以使用:

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

,这将有ls列表中的每个组按时间顺序的文件,但是如果命令运行不止一次(大量文件),然后每个批次都会被排序,但这些组可能是这样的,即文件453是在文件2912之后以所呈现的顺序创建的。

如果您需要将它们排序而不管文件数量多少,那么您可能需要使用stat命令将文件名和修改时间打印为数字,然后按数字进行排序,最后剥离数字。

在Mac OS X,你可以使用:

find . -type f -exec stat -f '%Dm %N' {} + | sort -n | awk '{print $2}' 

(该%Dm打印修改时间为十进制数; %N打印的文件名。)

不过,如果你是在Linux上,您需要查看Linux stat的手册页,因为它不同。如果您在其他系统上,stat命令可能可用或不可用;它没有被POSIX标准化。