2015-10-23 291 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標準化。