O script Bash precisa converter a string em data

0

Olá, eu tenho esse script bash para verificar a integridade dos backups. Preciso editá-lo, pois tenho que me avisar quando o backup mais antigo tiver mais de 60 dias (quando os excluirmos).

Agora a data é extraída de outro arquivo

OLDEST_DATE=`cat /tmp/B_BACKUP_TMP.out | head -1  | cut -f5,6,8 -d" "`

no seguinte formato:

29 de outubro de 2018

No entanto, esse formato não pode ser captado quando tento usá-lo com -mtime +60

Alguma idéia de como posso convertê-lo?

Obrigado.

stefzeer
fonte

Respostas:

2

O datecomando é bastante flexível no reconhecimento de cadeias que representam datas. Então, por exemplo:

$ date -d 'Oct 29 2018'
Mon Oct 29 00:00:00 CET 2018

A -dbandeira instrui datepara exibir a data fornecida como uma string.
Você pode adicionar o +FORMATparâmetro para converter a data como desejar. Por exemplo:

$ date -d 'Oct 29 2018' '+%Y-%m-%d'
2018-10-29

Consulte man datea opção em que você deve definir o formato de saída.

EDITAR:

Desculpe, não recebi sua referência -mtime. Você está falando sobre o findfiltro? Nesse caso, acho que você precisa da diferença entre hoje e o seu OLDEST_DATE, em dias.

Você pode obtê-lo convertendo as datas no formato Época (segundos desde 1970-01-01 00:00:00 UTC). Por exemplo:

$ current="$(date '+%s')"
$ oldest_date_epoch="$(date -d "$OLDEST_DATE" '+%s')"
$ diff_days=$(( ("$current" - "$oldest_date_epoch") / (3600 * 24) ))

Observe que essa não é uma solução geral, pois datenão pode entender idiomas estrangeiros .

fra-san
fonte