2011-02-14 30 views
52

所以這裏的交易。比方說,我有一個名爲 「網絡」 目錄,所以在linux終端中,如何顯示文件夾的最後修改日期,並將其內容考慮在內?

$ ls -la 

drwx------ 4 rimmer rimmer 4096 2010-11-18 06:02 web 

但是這個目錄,網頁/ PHP中/

$ ls -la 

-rw-r--r-- 1 rimmer rimmer 1957 2011-01-05 08:44 index.php 

這意味着,即使我的目錄的內容,/ WEB/PHP /index.php最後修改時間爲2011-01-05,/ web /目錄本身報告爲最後一次修改時間爲2010-11-18。

我需要做的是將我的/ web /目錄的最後修改日期以遞歸方式報告爲此目錄內任何文件/目錄的最新修改日期。

我該如何去做這件事?

+1

我'米好奇你爲什麼認爲你需要這樣做。 – 2011-02-15 02:16:03

回答

47

喜歡的東西:

find /path/ -type f -exec stat \{} --printf="%y\n" \; | 
    sort -n -r | 
    head -n 1 

說明:

  • find命令將打印修改時間爲每個文件遞歸忽略目錄(根據IQAndreas你不能依賴於文件夾的註釋時間戳)
  • 排序-n(數字)-R(反向)
  • 頭-n 1:獲得的第一項
+2

得愛管道...... – grisaitis 2012-06-21 21:51:32

+1

根據[coreutils文檔](https://www.gnu.org/software/coreutils/manual/html_node/head-invocation.html#head-invocation),你可能會考慮'head -n 1「或」sed 1q「而不是陳舊的語法。 – sappjw 2012-12-20 20:16:29

5

如果可以的話,我會投保羅的答案。我測試了它並理解了這個概念。我可以證實它的作品。 find命令可以輸出很多參數。 例如,添加以下到--printf條款:

%a for attributes in the octal format 
%n for the file name including a complete path 

例子:

find Desktop/ -exec stat \{} --printf="%y %n\n" \; | sort -n -r | head -1 
2011-02-14 22:57:39.000000000 +0100 Desktop/new file 

讓我提出這個問題還有: 請問這個問題筆者想解決使用猛砸他的問題或PHP?這應該被指定。

17

如果你有一個版本的find(如GNU find)支持-printf那麼就沒有必要重複調用stat

find /some/dir -printf "%T+\n" | sort -nr | head -n 1 

find /some/dir -printf "%TY-%Tm-%Td %TT\n" | sort -nr | head -n 1 

如果你不需要遞歸,但:

stat --printf="%y\n" * 
相關問題