Shell
在 POSIX shell 中獲取文件修改時間
是否可以僅使用 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 格式的所有限制的阻礙。
您最好的便攜選擇是使用
perl
orpython
:perl -MPOSIX -le ' for (@ARGV) { if (@s = lstat$_) {print $s[9]} else {warn "$_: $!\n"} }' -- "$file"
(請注意,它不包括許多現代系統上可用的納秒。例如,您可以通過
Time::HiRes
模組獲取它,但假設它已安裝並且來自最新版本)。