Bash
目錄“遞歸”最後修改日期
我想知道 linux bash 中的命令或函式來獲取目錄中最後修改文件的時間戳(並可能格式化其輸出)。
假設我有 /path/mydir 並且這個目錄裡面有一大堆文件。給定它的路徑,我想輸出最近修改文件的時間戳。
我猜這個過程可以做一個 foreach 文件遞歸,檢查它們並在每次找到最近的一個時用最近的時間更新一個變數。
編輯:很抱歉造成混亂,但我想使用 Epoch 時間戳:)
一種選擇:使用 GNU find 遞歸遍歷所有文件;使用文件路徑列印時間戳並按日期排序:
find /path/mydir -type f -printf "%T+\t%p\n" | sort | tail -1
對於紀元時間戳,
find /path/mydir -type f -printf "%T@\n" | sort | tail -1
鑑於問題中的linux和bash標籤以及“linux bash”規範,這裡有一個特定於 bash 的函式,它將輸出給定目錄結構中最近修改的文件的文件名和時間戳:
function lastmodified () ( shopt -s globstar latest= t=0 for f in "$1"/** do x=$(stat -c "%Y" "$f") if [ $x -gt $t ] then latest="$f" t="$x" fi done printf "%s\n" "$latest" printf "%s\n" "$(date -d @${t})" )
像這樣使用它:
lastmodified /path/mydir
.它在子 shell 中執行以隔離globstar shell 選項以及各種變數分配。更改或刪除 printf 語句以擷取您感興趣的數據。
它通過要求 bash 擴展給定參數下的所有文件名路徑來工作,然後使用stat命令
$1
檢查“上次修改時間為自 Epoch 以來的秒數” 。最近的文件名將以 . 結尾,其時間戳以.$latest``t