Shell

在 POSIX shell 中獲取文件修改時間

  • July 1, 2021

是否可以僅使用 POSIX 功能從 shell 獲取文件修改時間?理想情況下在 unix 時間戳(秒)中。

我能找到的所有東西都在使用stat(1),但在 POSIX 中似乎沒有定義。是否可以?

恐怕唯一的 POSIX CLI(shell 和實用程序)介面lstat()stat()系統呼叫是它的輸出不能可靠地進行後處理。ls

一個技巧可能是使用pax -x ustar(指定pax命令及其ustar格式)生成一個tar包含文件的文件並從文件中提取時間戳。

echo "$((0$(pax -x ustar -wd -- "$file" |
   dd 2> /dev/null bs=4 skip=34 count=3 | tr -d '\0')))"

mtime八進制數儲存在偏移量 136 處。

但是,它受到 US-tar 格式的所有限制的阻礙。

您最好的便攜選擇是使用perlor python

perl -MPOSIX -le '
 for (@ARGV) {
   if (@s = lstat$_) {print $s[9]} else {warn "$_: $!\n"}
 }' -- "$file"

(請注意,它不包括許多現代系統上可用的納秒。例如,您可以通過Time::HiRes模組獲取它,但假設它已安裝並且來自最新版本)。

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