このコマンドの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
日付を印刷できないことは、しばしば不幸な欠陥です。一部のユニスでは別の日付を印刷できますが、残念ながら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が必要なので、/usr/xpg4/bin
前または電話があることを確認してください。)/usr/xpg6/bin
/usr/bin
PATH
nawk
答え2
私はPerlが最善の方法だと思います。私はSolarisで有用な日付コンバータを知らず、date
コマンドは現在の時刻のみを印刷または設定します。
答え3
まあ、それは正確に欲しいフォーマットではありませんが、どうですか?
stat -c %y /etc/motd
=>
2011-03-08 11:39:20.000000000 +0000
次に、目的のものを使用して適切なタイムスタンプを形成します。
編集する
私はOpenSolarisまたはSolaris 11がGNUバージョンにバンドルされていると仮定しますstat
。