Solarisの日付と同じ - 参照

Solarisの日付と同じ - 参照

このコマンドの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ユーザーとグループ名を抑制し、-ESolarisにのみ適用されます。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/binPATHnawk

答え2

私はPerlが最善の方法だと思います。私はSolarisで有用な日付コンバータを知らず、dateコマンドは現在の時刻のみを印刷または設定します。

答え3

まあ、それは正確に欲しいフォーマットではありませんが、どうですか?

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

次に、目的のものを使用して適切なタイムスタンプを形成します。

編集する
私はOpenSolarisまたはSolaris 11がGNUバージョンにバンドルされていると仮定しますstat

関連情報