date コマンドで昨日の日付を求める

shell script やcrontab なんかで昨日の日付を求めるのに計算するのはめんどくさいなと常々思っていたのですが,GNU date コマンドで出来るのを知りました.

$ date --date '1 day ago'
$ date -d '1 day ago'

1の部分を7にすれば7日前ですし,30にすれば30日前です.

他にも
$ date --date='1 months ago'
1月前
$ date --date='1 months ago 1day ago'
1月と1日前
$ date --date='3 months'
3ヶ月後

といったことも可能です.

format option も同時に利用できるので,以下のようなことも.

rsync -avv --delete --exclude-from=/export/home/mk/denylist --link-dest=/export/home/mk/`/bin/date -d '1 day ago' +%Y%m%d`/ /home/mk/ /export/home/mk/`date +%Y%m%d`/

rsync で前日のバックアップとの差分を今日のディレクトリ名の場所にバックアップしています.

GNU date の機能のようで,Solaris の/bin/date では使えませんでした.勿論SolarisGNU date(coreutils) を入れれば利用できます.

- Examples of date - GNU Coreutils
http://www.gnu.org/software/coreutils/manual/html_node/Examples-of-date.html

追記)

前月を知る - sh編 - (ひ)メモ
http://d.hatena.ne.jp/hirose31/20100916/1284628891

安直に「1 month ago」でいいじゃん!と思った人は負けです(ぼくもですけど><)。

手元でも試してみる.

% date +%Y/%m/%d -d '20110531 1 month ago'
2011/05/01
% date +%Y/%m/%d -d '20110331 1 month ago'
2011/03/03

なんとorz