Bash-Skript muss String in Datum konvertieren

608
stefzeer

Hallo, ich habe dieses Bash-Skript zum Überprüfen der Integrität von Backups. Ich muss es bearbeiten, da ich mich warnen muss, wenn das älteste Backup mehr als 60 Tage dauert (da wir diese löschen).

Jetzt wird das Datum aus einer anderen Datei extrahiert

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

im folgenden Format:

29. Oktober 2018

Dieses Format kann jedoch nicht abgerufen werden, wenn ich versuche, es mit -mtime +60 zu verwenden

Irgendwelche Ideen, wie ich es konvertieren kann?

Vielen Dank.

0

1 Antwort auf die Frage

2
fra-san

Der dateBefehl ist recht flexibel beim Erkennen von Zeichenfolgen, die Datumsangaben darstellen. Also zum Beispiel:

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

Das -dFlag weist datean, das angegebene Datum als Zeichenfolge anzuzeigen.
Sie können den +FORMATParameter hinzufügen, um das Datum nach Ihren Wünschen zu konvertieren. Zum Beispiel:

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

Siehe man datefür die Option, die Sie für das Ausgabeformat festlegen müssen.

BEARBEITEN:

Entschuldigung, ich habe Ihre Referenz nicht erhalten -mtime. Sprichst du über den findFilter? Wenn ja, ich denke, Sie brauchen OLDEST_DATEin Tagen den Unterschied zwischen heute und Ihrem .

Sie können es erhalten, indem Sie Datumsangaben in das Epochenformat konvertieren (Sekunden seit 1970-01-01 00:00:00 UTC). Zum Beispiel:

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

Beachten Sie, dass dies keine generelle Lösung ist, da dateFremdsprachen nicht verstanden werden können .