stat:文件的修改时间戳


11

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

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

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

Answers:


12

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

如果您想使用一种可移植的方式来运行这些程序而与OS无关,则有几种方法可以执行。我想我会一次将变量设置为适当的参数:

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

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

stat $mod_time_fmt .bashrc

7

这取决于您所说的“此”的含义。如果你问是否有一个可移植的方式来获得文件的mtime使用stat(1),则没有,没有。BSD stat(1)与Linux不同stat(1)

如果您问是否有一种便携式方法来获取文件的mtime,那么可以,您可以使用以下方法perl(1)

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

5

由于OSX和Ubuntu版本的版本stat有所不同,因为OSX stat默认为简洁输出,而Linux stat默认为冗长,则需要跳过一些麻烦。一种可能性是仅在OSX上使用别名,使stat在两者上的性能相同。

如果您不介意设置别名以stat在OSX上强制使用verbose输出,alias stat="stat -x"则不需要perl。

stat .bashrc| grep Modify 这是Ubuntu下您所需要的。如果您按上述设置别名,则它也可以在OSX下使用

来自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上的统计输出


我认为您在OSX上缺少-x选项。
fushupinnanren

@Derry,您是对的,可惜我必须依靠研究OSX,因为我没有OSX。更正的答案。
年长者极客
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.