コマンドを実行しようとしていますが、出力ファイル名に日付と時刻を入れたいと思います。
実行したいサンプルコマンドを次に示します。
md5sum /etc/mtab > 2016_4_25_10_30_AM.log
日付時刻形式は、アンダースコアを使用して適切に設定できます。AMとPMを使用できない場合はUTCでも。
コマンドを実行しようとしていますが、出力ファイル名に日付と時刻を入れたいと思います。
実行したいサンプルコマンドを次に示します。
md5sum /etc/mtab > 2016_4_25_10_30_AM.log
日付時刻形式は、アンダースコアを使用して適切に設定できます。AMとPMを使用できない場合はUTCでも。
回答:
現在の日時をファイル名として使用する場合は、date
and コマンドsubstitutionを使用できます。
$ md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"
その結果、ファイルは2016_04_25_10_30_AM.log
(現在の日時で)/etc/mtab
内容がmd5ハッシュで作成されます。
12時間形式のタイムスタンプを含むファイル名は、おそらく名前で並べ替えることができないことに注意してください。代わりに24時間形式のタイムスタンプを使用することにより、この問題を回避できます。
特定の日付形式を使用する必要がない場合は、ISO 8601準拠の日付時刻形式を使用することを検討してください。有効なISO 8601日時表現を生成する方法の例を次に示します。
$ date +"%FT%T"
2016-04-25T10:30:00
$ date +"%FT%H%M%S"
2016-04-25T103000
$ date +"%FT%H%M"
2016-04-25T1030
$ date +"%Y%m%dT%H%M"
20160425T1030
「より安全な」ファイル名が必要な場合(たとえば、Windowsとの互換性のため)、時間部分からコロンを省略できます。
上記の例はすべてローカルシステム時間を想定していることに注意してください。タイムゾーン全体で一貫した時間表現が必要な場合は、タイムゾーンオフセットまたはUTCを指定する必要があります。次のdate
ように、呼び出しのフォーマット部分で「%z」を使用することにより、ISO 8601準拠のタイムゾーンオフセットを取得できます。
$ date +"%FT%H%M%z"
2016-04-25T1030-0400
フラグをdate
指定し-u
、datetime文字列の最後に「Z」を追加して、時刻が次のようにUTCであることを示すことにより、呼び出しでUTC時間を取得できます。
$ date -u +"%FT%H%MZ"
2016-04-25T1430Z
$(date +%FT%T)
与えるであろう2016-04-25T10:30:00
。