dateコマンドで○日前の日付を取得する
久しぶりに仕事でbashを書きました。
『date』コマンドで○日前/○日後の日付を取得する方法で、
少しだけハマッたので、覚書として書いておきます。
Linux系の場合
オプション"--date"で"○ day(s)"(○日前の場合は"ago"を付ける)を指定する。
$ date +"%Y%m%d"
20090609$ date +"%Y%m%d" --date "1 day"
20090610$ date +"%Y%m%d" --date "7 days"
20090616$ date +"%Y%m%d" --date "1 day ago"
20090608$ date +"%Y%m%d" --date "7 days ago"
20090602
BSD系の場合
オプション"-v"で"+○d"(○日前の場合は"-")を指定する。
$ date +"%Y%m%d"
20090609$ date +"%Y%m%d" -v+1d
20090610$ date +"%Y%m%d" -v+7d
20090616$ date +"%Y%m%d" -v-1d
20090608$ date +"%Y%m%d" -v-7d
20090602
古いUNIX系の場合
一時的にタイムゾーンを設定して対応する。
※日本時間は世界標準時間 GMT (≒UTC) より9時間早いので、
1日前 (24時間前)なら -9+24=15 をタイムゾーンに設定
1日後 (24時間後)なら -9-24=-33 をタイムゾーンに設定
$ date +"%Y%m%d"
20090609$ env TZ=JST-33 date +%Y%m%d
20090610$ env TZ=JST-153 date +%Y%m%d
20090615$ env TZ=JST+15 date +%Y%m%d
20090608$ env TZ=JST+159 date +%Y%m%d
20090602
お仕事サーバーは古いUNIXだったので、残念ながら一番下の書き方で実現しました。