Oft brauche ich das ja nicht, dann aber umso dringender: Wieviele Tage sind seit einem bestimmten Datum vergangen.
"date" kann nicht nur das heutige, sondern auch ein Datum in der Vergangenheit in anderer Form darstellen.
Bei der Eingabe ginge zwar auch z.B. JJMMTT, aber um Mißverständnissen vorzubeugen, besser JJJJMMTT verwenden. Welches Datum wäre z.B. 070706? Der 7. Juli 2006 oder der 6. Juli 2007?
date rechnet das Datum in den Unixtimestamp (=Sekunden seit 1.1.1970 00:00:00) um, mit dem ich dann rechnen kann.
var=$( date -d 20081019 +%s ); echo $(( (`date +%s` - $var) / 86400 )) Tage
Ergebnis heute: 31 Tage
Vorsicht, hier verwende ich der Übersicht halber ausnahmsweise Backtick Operators, die zum Copy-Pasten oft ein Horror sind.
Das Ganze funktioniert natürlich auch mit Datum vor 1970:
var=$( date -d 19691019 +%s ); echo $(( (`date +%s` - $var) / 86400 )) Tage
Ergebnis heute: 14276 Tage
Das könnte man natürlich noch in Jahre umrechnen:
var=$( date -d 19691019 +%s ); echo $(( (`date +%s` - $var) / 86400 / 365 )) Jahre
Ergebnis heute: 39 Jahre
Meist geht es mir aber nicht um so weit in der Vergangenheit Liegendes.
Ich brauche z.B. die Anzahl der Tage für
find, um in einem (Log-)Archiv alle Dateien zu löschen, die vor einem Stichtag angelegt wurden.
Ein Beispiel mit Stichtag 1.1.2008 (diesmal sekundengenau):
var=$( date -d "20080101 00:00:00" +%s ); echo $(( (`date +%s` - $var) / 86400 ))
323
find . -daystart -maxdepth 1 -type f -ctime +323 -ls
Sicherheitshalber nehme ich beim ersten Aufruf von find zum Löschen vieler Dateien zuerst die Option "-ls", erst danach "-delete". Das könnte sonst ins Auge gehen.