當前位置: 首頁>>技術問答>>正文


在Linux終端中,如何考慮到文件夾的內容,顯示該文件夾的最後修改日期?

, , , ,

問題描述

所以這是交易。假設我有一個名為”web”的目錄,所以

$ ls -la

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

但是在這個目錄下,web /php /

$ ls -la

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

這意味著即使我的目錄/web/php/index.php的內容上次修改時間為2011年1月5日,/web /目錄本身也被報告為最後一次修改時間為2010年11月18日。

我需要做的是遞歸地將/web /目錄的最後修改日期報告為該目錄內任何文件/目錄的最新修改日期。

我該怎麽做呢?

最佳解決思路

就像是:

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

說明:

  • find命令將為每個文件遞歸地忽略目錄打印修改時間(根據IQAndreas的評論,您不能依賴文件夾時間戳)

  • 排序-n(按數字)-r(反向)

  • 頭-n 1:獲取第一個條目

次佳解決思路

如果您擁有支持-printffind版本(例如GNU find),則無需重複調用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" *

第三種解決思路

如果可以的話,我將投票支持保羅的答案。我測試了一下並理解了這個概念。我可以確認它有效。 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

讓我也提出這個問題:這個問題的作者是否想使用Bash或PHP解決他的問題?應該指定。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/7260.html,未經允許,請勿轉載。