ログファイルやAPIのリクエスト結果をファイルに保存しておく時、
上書きしないように毎回ファイル名を変更するのは大変だ。
そのため、保存するファイル名に日付や時刻を入れておくようにすると、
同じコマンドでも実行した時間によって別のファイルに保存することができる。
使うコマンド
日付や時間を出力するdate
コマンドを使う。
基本的に以下のように利用する。
# 「+」に、フォーマットを表す文字列を続けることで、任意のフォーマットを出力することができる
$ date +"フォーマット"
フォーマットいろいろ
フォーマット | 意味 | 例:2021年3月25日(木)0時38分28秒 |
%Y | 西暦 | 2021 |
%m | 月(01〜12) | 03 |
%d | 日 | 25 |
%H | 24時間形式の時間(00〜23) | 00 |
%I | 12時間形式の時間(01〜12) | 12 |
%M | 分(00〜59) | 38 |
%S | 秒(00〜60) | 28 |
%F | 日付(%Y-%m-%d) | 2021-03-25 |
%T | 時刻(%H:%M:%S) | 00:38:28 |
%X | 時刻(%H時%M分%S秒) | 00時38分28秒 |
おすすめ
おすすめは区切り文字なしで、全ての数字をそのまま繋げるのがよい。
エスケープとか日本語とか気にしなくて済む。
また、重複を防ぐため12時間表記(%I
)よりも24時間表記(%H
)の方が良い。
# 日付までわかれば良い場合
$ date +"%Y%m%d"
20210325
# 時間まで分かると良い場合
$ date +"%Y%m%d%H%M"
202103250038
ファイルの名前に混ぜる場合
ファイルの名前に入れる場合は$()
かバッククォートで囲めば良い。
$ echo "hoge" > hoge_$(date +"%Y%m%d").txt
$ ls
hoge_20210325.txt
$ echo "fuga" > fuga_`date +"%Y%m%d"`.txt
$ ls
fuga_20210325.txt
補足:fishの場合
$ echo "hoge" > hoge_(date +"%Y%m%d").txt
おまけ:日付を○日前に変更する場合
Linuxは--date
オプションにより変更可能だが、Macにはそれがないのでメモ。
「バッチの集計対象が昨日で、集計対象の日付をファイル名としたい」時などに使える。
# Linuxの場合
# 前日
$ date --date '1 days ago'
$ date -d '1 days ago'
# Macの場合
# 前日
$ date -v -1d
# 2021年4月20日に実行した場合
$ date -v -1d '+%Y-%m-%d'
2021-04-19
まとめ
date
コマンドを使って日付を出力する- 「
date +"フォーマット"
」で任意の日時を出力できる $()
やバッククォートを使って差し込む