すがブロ

sugamasaoのhatenablogだよ

シェルスクリプトで一日前の日付を求める

 ログローテーションを行うときに、ファイル名を付けるにあたって、1日前の日付を求める必要があった。
主にこのサイトを参考にシェルスクリプトを組んでみた(http://www.toshikazu.org/archives/000087.html)。
 しかし、どうも date コマンドの動作がおかしいようだ。
で、原因を探ってみると、

`date -v-1d +%Y%m%d`

の -v-1d という部分が使用できていないようだ*1
で、それではどうすれば良いか? ちょっと調べてみた。
方法としてはタイムゾーンを上手いこといじくる方法もあるみたいだったが、なんとなく面倒そうだったので他の方法を探してみると……あった。これはすごい。

date --date '1 day ago'

とすると1日前の日付を表示してくれる。
だもんで、一番上のような状況ではこう書けば良いようだ。

`date --date '1 day ago' +%Y%m%d`

 いやー、この手の手段ってきっと需要があるはずだから、お手軽な方法がいくつかあると踏んで調べてみたんだけど、こんな方法があるとはね。
シェルスクリプトは難しいね……。

*1:OSはvine linux 3.2なんだけどね……?