tk_ch’s blog

インフラエンジニアのブログ

【Linux】日時をファイル名に含める

コマンド実行の手順書を作成したり、簡単なログファイルを出力するときに、実行時の日時をファイルやディレクトリの名前に入れたくなることがある。 いつも忘れてググることになるので、メモしておく。

環境

CentOS

実施内容

ファイル名に入れたい日時の文字列は、dateコマンド出力できる。
dateコマンドに+で始まる書式を指定することで、フォーマットを変更できる。

$ date
202241日 金曜日 17:54:44 JST
$ date "+%Y%m%d_%H%M%S_%3N"
20220401_180506_367

上記で使った書式の意味は以下。

書式 意味
%Y 西暦(4桁)
%m 月(01~12)
%d 日(01~31)
%H 時(00~23)
%M 分(00~59)
%S 秒(00~59)
%3N ミリ秒(000~999)

シングルクォート付きでコマンドを埋め込むことで、そのコマンドの実行結果を使用することができる。 以下のようにすれば、作成するファイル名に日時に入れられる。

$ touch test_`date "+%Y%m%d_%H%M%S_%3N"`.txt

$ ls 
test_20220401_180740_408.txt

cronに設定する際は「%」の前に「\」を入れてエスケープする必要があるので注意すること。

$ crontab -l
# 毎分、存在するプロセスを日時名ログファイルに出力する処理
* * * * * /bin/ps aux > /tmp/`date "+\%Y\%m\%d_\%H\%M\%S_\%3N"`.log

$ ls -1  *.log
20220401_181602_168.log
20220401_181701_808.log
20220401_181801_816.log
20220401_181901_826.log

参考文献

日時をファイル名に付けるには
date コマンド