Uma nota de aviso:
$ date -r ~/a
Sun 28 Oct 23:12:00 GMT 2012
$ LC_ALL=C date -r ~/a
Sun Oct 28 23:12:00 GMT 2012
Como saída, date
exibe a data no formato local do usuário. Como a entrada para -d
GNU date
é mais exigente no formato:
$ date -d "$(date -r ~/a) - 1 day"
date: invalid date ‘Sun 28 Oct 23:12:00 GMT 2012 - 1 day’
Como corrigir o código de idioma para C corrige esse problema:
$ export LC_ALL=C
$ date -d "$(date -r ~/a) - 1 day"
Sun Oct 28 00:12:00 BST 2012
Mas note como a data ainda é 2012-10-28, embora agora no horário de verão. Isso porque 24 horas antes daquela data na Grã-Bretanha, ainda estávamos no mesmo dia.
Agora, se você quiser no dia anterior, terá que escrevê-lo:
date -d "$(date -r /tmp/file.ref +'%F -1 day')" +%F