ファイル名に日付と時刻をどのように入れますか?


23

コマンドを実行しようとしていますが、出力ファイル名に日付と時刻を入れたいと思います。

実行したいサンプルコマンドを次に示します。

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

日付時刻形式は、アンダースコアを使用して適切に設定できます。AMとPMを使用できない場合はUTCでも。


Bashではない場合、どのシェルを使用していますか?
ライアン

ああそれはbashです... bashスクリプトを意味しました*
-visc

あなたはパイプではなく、リダイレクトしています。そして、あなたがリダイレクトしていない場合、質問は同じになります。タイトルを更新しています。
ミケル

回答:


46

現在の日時をファイル名として使用する場合は、dateand コマンド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

@Mikelあなたと私はクロスエディットしましたか?
ライアン

おそらく。「サブシェル」を「コマンド置換」に変更しました。これで完了ですので、好きなように編集してください。
ミケル

@Mikel問題ありません。編集内容を再送信しました。
ライアン

@Mikel心配無用!とにかく「コマンド置換」と呼ぶことを覚えておくべきでした。答えを改善してくれてありがとう!
ライアン

3
アンダースコアは奇妙なキャラクターです。同様にISO-8601を使用することが好ましい$(date +%FT%T)与えるであろう2016-04-25T10:30:00
hschou
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.