Bash

目錄“遞歸”最後修改日期

  • December 11, 2020

我想知道 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

鑑於問題中的linuxbash標籤以及“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

引用自:https://unix.stackexchange.com/questions/413515