恐怕唯一的 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')))"
Run Code Online (Sandbox Code Playgroud)
mtime以八进制数的形式存储在偏移量 136 处。
但是,它受到 US-tar 格式的所有限制的阻碍。
您最好的选择是使用perlor python:
perl -MPOSIX -le '
for (@ARGV) {
if (@s = lstat$_) {print $s[9]} else {warn "$_: $!\n"}
}' -- "$file"
Run Code Online (Sandbox Code Playgroud)
(请注意,它不包括许多现代系统上可用的纳秒。Time::HiRes例如,您可以通过模块获取它,但前提是它已安装并且来自最新版本)。