stat:文件的修改时间戳

stat:文件的修改时间戳

我用来stat -f %m .bashrc获取 osx 上 .bashrc 的修改时间。但是当我在 ubuntu 上运行相同的命令时,它会出现错误:

stat: cannot read file system information for %m': No such file or directory

有没有兼容的方法来实现这一目标?

答案1

Ubuntu 使用 GNU coreutils stat,而 OSX 使用 BSD 变体。所以在 Ubuntu 上命令有点不同:

stat -c %Y .bashrc

man stat

   -c  --format=FORMAT
          use the specified FORMAT instead of the default; output  a  new‐
          line after each use of FORMAT

和:

   %Y     time of last data modification, seconds since Epoch

如果您想要一种可移植的方式来运行它们,而不管操作系统如何,那么有几种方法可以实现。我想我会一次将一个变量设置为适当的参数:

if uname | grep -q "Darwin"; then
    mod_time_fmt="-f %m"
else
    mod_time_fmt="-c %Y"
fi

然后在stat命令中需要的地方使用该值:

stat $mod_time_fmt .bashrc

答案2

这取决于你所说的“这个”是什么意思。如果您询问是否有一种可移植的方式来获取文件mtimestat(1)那么不,没有。 BSDstat(1)与 Linux 不同stat(1)

如果您询问是否有一种可移植的方式来获取文件的mtime,那么是的,您可以使用以下方法来做到这一点perl(1)

perl -e 'print +(stat $ARGV[0])[9], "\n"' file

答案3

由于 OSX 和 Ubuntu 版本stat有一些差异,OSXstat默认为简洁输出,而 Linuxstat默认为详细输出,因此需要跳过一些障碍。一种可能性是在 OSX 上简单地使用别名,使 stat 在两者上执行相同的操作。

如果您不介意设置别名来强制stat在 OSX 上进行详细输出,alias stat="stat -x"那么您就不需要 perl。

stat .bashrc| grep Modify 这就是 Ubuntu 下你所需要的一切。如果您按照上面的方式设置别名,它将在以下情况下工作操作系统也一样

Ubuntu 14.04.5 的示例 从 Ubuntu 16.04 可以获得几乎相同的结果

   stat .bashrc| grep Modify
Modify: 2014-03-30 23:14:47.658210121 -0500

如果您想要的只是时间戳,您可以剥离Modify:并保留其余部分

stat .bashrc| grep Modify | cut -c 9-

资料来源:

https://ss64.com/osx/stat.html

OSX 上的统计输出

相关内容