シェルで"昨日"みたいな相対的な日付が欲しい

シェルスクリプトで昨日の日付とか、n日前の日付が必要になりまして。

自前で計算すると面倒くさいし、なんかないかと思ってdate --helpを見ていたら「display time described by STRING, not 'now'」なんてかなりそれっぽい記述が。 引数は-d STRING--date=STRINGらしい。

試してみた。

$ date
2015年  1月 17日 土曜日 08:53:41 JST
$ date -d yesterday
2015年  1月 16日 金曜日 08:53:55 JST

おお、これはいい。

$ date -d -1day
2015年  1月 16日 金曜日 08:53:58 JST
$ date -d 1hour
2015年  1月 17日 土曜日 09:54:09 JST

結構いろいろあるようだ。

$ date -d 2010-01-01
2010年  1月  1日 金曜日 00:00:00 JST

表示形式を変換する用途にも使えそう。

$ date -d yesterday +%%Y%%m%%d
20150116

表示形式の指定ももちろん可能。

結構便利っぽいぞ、このコマンド?