【Linux】作成するファイル名に日付を入れる

Linuxコマンド シェルスクリプト

ログファイルやAPIのリクエスト結果をファイルに保存しておく時、
上書きしないように毎回ファイル名を変更するのは大変だ。

そのため、保存するファイル名に日付や時刻を入れておくようにすると、
同じコマンドでも実行した時間によって別のファイルに保存することができる。

使うコマンド

日付や時間を出力するdateコマンドを使う。

基本的に以下のように利用する。

# 「+」に、フォーマットを表す文字列を続けることで、任意のフォーマットを出力することができる
$ date +"フォーマット"

フォーマットいろいろ

フォーマット意味例:2021年3月25日(木)0時38分28秒
%Y西暦2021
%m月(01〜12)03
%d25
%H24時間形式の時間(00〜23)00
%I12時間形式の時間(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 +"フォーマット"」で任意の日時を出力できる
  • $()やバッククォートを使って差し込む

タイトルとURLをコピーしました