Solaris 中 date --reference 的等效项

jan*_*nos 6 shell solaris stat date

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

date -r /etc/motd +%Y%m%d_%H%M%S
# output in the format: 20121001_171233
Run Code Online (Sandbox Code Playgroud)

在 Solaris 中是否有类似的东西?作为一种解决方法,我使用这样的stat功能来做到这perl一点:

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

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

ls -Ego /etc/motd | awk '{print $4 "_" $5}' | tr -d :- | sed -e 's/\..*//'
Run Code Online (Sandbox Code Playgroud)

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

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

Gil*_*il' 2

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

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

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

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