Como obter uma data anterior usando uma referência a um arquivo com o comando date?

4

Estou tentando obter a data anterior do arquivo de referência.

O que eu tentei:

[rahul@testsrv]$ date +%F -r /tmp/ftpbkp.log
2013-08-27

[rahul@testsrv]$ date +%F -r /tmp/ftpbkp.log -d "1 day ago"
date: the options to specify dates for printing are mutually exclusive
Try 'date --help' for more information.
    
por Rahul Patil 28.08.2013 / 14:59

4 respostas

5

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
    
por 28.08.2013 / 15:53
4
LC_ALL=C date -d "$(LC_ALL=C date -r /tmp/ftpbkp.log) - 1 day" +%F

Se data do GNU não estiver disponível:

perl -MPOSIX -le'
  print strftime("%Y-%m-%d", localtime +(stat shift)[9] - 24*60*60)
  ' /tmp/ftpbkp.log
    
por 28.08.2013 / 15:16
2
date -r /tmp/ftpbkp.log +%s | awk '{print strftime("%F", $1 - (24*60*60) );}'
    
por 28.08.2013 / 15:16
1

A opção -d é usada para especificar um horário diferente do horário atual. Você pediu ao comando date para formatar o horário da última modificação do arquivo /tmp/ftpbkp.log de acordo com o formato %F e, além disso, você o passou em outro momento especificado pela opção -d . Essas opções são mutuamente exclusivas. Mas há um truque de como combiná-lo:

date -d "'date -r /tmp/ftpbkp.log'" - 1 day"
    
por 28.08.2013 / 15:22

Tags