Solaris 中日期的等效项 --reference

Solaris 中日期的等效项 --reference

该命令的 GNU 实现date有一个很好的功能,可以显示参考文件的最后修改日期。然后使用该+FORMAT参数可以轻松获取任何格式的日期,例如:

date -r /etc/motd +%Y%m%d_%H%M%S
# output in the format: 20121001_171233

Solaris 中是否有等效方法?作为一种解决方法,我使用如下stat函数来实现:perl

perl -mPOSIX -e 'print POSIX::strftime("%Y%m%d_%H%M%S\n", localtime((stat("/etc/motd"))[9]))'

另一种选择是解析以下输出ls -Ego

ls -Ego /etc/motd | awk '{print $4 "_" $5}' | tr -d :- | sed -e 's/\..*//'

但众所周知,解析 的输出ls是一种不好的做法。

有更好/更简单/更优雅的解决方案吗?

答案1

除了当前日期之外无法date打印任何内容是一个经常令人遗憾的缺陷。有些 unice 允许它打印其他日期,但遗憾的是 Solaris 不允许。

只要你只需要数字输出,你就可以解析 的输出ls -Ego。这些选项-go抑制用户名和组名,并且-E是 Solaris 特定的选项ls这使得它以可解析的格式显示时间。

ls -Ego /path/to/file |
awk 'NR==1 {$0 = $4 "_" $5; gsub(/[-:]/,""); sub(/\..*/, ""); print}'

(这适用于/usr/bin/ls但需要符合 POSIX 标准的 awk,因此请确保在, 或 call之前有/usr/xpg4/bin或。)/usr/xpg6/bin/usr/binPATHnawk

答案2

我认为 Perl 是你最好的选择;我不知道 Solaris 中有任何有用的日期转换器,并且date命令仅打印或设置当前时间。

答案3

嗯,不完全是你想要的格式,但是怎么样

stat -c %y /etc/motd
=>
  2011-03-08 11:39:20.000000000 +0000

然后使用您喜欢的任何内容来形成该时间戳。

编辑
我假设 OpenSolaris 或 Solaris 11 捆绑了 GNU 版本stat

相关内容