The new short way:
$ date -d '1 day ago' +'%Y/%m/%d'
2009/07/21
Or the longer way:
Yesterday in epoch seconds
$ yesterday=$((`date +'%s'` - 86400))
Get default formatted yesterday's date
$ date -d "1970-01-01 $yesterday sec"
Tue Feb 17 01:27:32 PST 2009
Same thing in YY-MM-DD
$ date -d "1970-01-01 $yesterday sec" +"%Y-%m-%d"
2009-02-17
It can be done like this, if you prefer a one-liner:
date -d @`echo $((\`date +%s\` – 86400))` +”%Y-%m-%d”
With newer versions of GNU date you may also write:
date -d ’1 day ago’