Shellskript: rechnen mit Datum
![](https://seccdn.libravatar.org/avatar/ccf85e218caa1f519dadc229183cfa5e.jpg?s=120&d=mm&r=g)
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo, hab mir zum Anfang mal ein kleines Shellskript gebastelt, das mir jedesmal beim Rauffahren ausgeführt werden soll. Das soll dann überprüfen, ob es eine Backupdatei mit diesem Datum gibt, wenn nicht die dann erstellen. Gleichzeitig soll das Ding die alten Sachen (alles älter als 3 Tage) löschen. Dazu habe ich mir ein Konstrukt wie folgt gebaut: while [-e Datei-$altesdatum.tar.gz] do rm Datei-$altesdatum.tar.gz let altesdatum=altesdatum-1 done (Also vom Prinzip her.) Hierbei ist $altesDatum im Format 20040708, z.B. das aktuelle Datum um 3 Tage erniedrigt (per "date"-Ausgabe). Das tut es auch super (also für einen Anfänger halt). NUR: Beim Monatswechsel gibt es ein Problem. Wird das Datum von 20040705 ab erniedrigt, dann geht das bis 20040701. Dann kommt ja 20040700, das es ja nicht gibt. Und das Skript stoppt. Die Dateien 20040630 oder so bleiben dann da. Wie kann ich das Problem lösen, also "mit Monaten und Tagen" rechnen? So dass 20040701 nach 20040630 kommt (vielleicht sogar mit Feburar 28 etc.)? Gibt es sowas, oder wie komme ich da raus? Danke, OJ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFA8ZzpMAex/QZx/TMRAgfWAJoCls6NkFuS62feZptTbpu5Ct6o5QCdET1c 1yjdi+R1DTc/ptLhLMELhcM= =3t2c -----END PGP SIGNATURE-----
![](https://seccdn.libravatar.org/avatar/735ea797d876adb026ae955e8adbf597.jpg?s=120&d=mm&r=g)
Am Sonntag, 11. Juli 2004 22:02 schrieb Johannes Kastl:
hab mir zum Anfang mal ein kleines Shellskript gebastelt, das mir jedesmal beim Rauffahren ausgeführt werden soll. Das soll dann überprüfen, ob es eine Backupdatei mit diesem Datum gibt, wenn nicht die dann erstellen.
Gleichzeitig soll das Ding die alten Sachen (alles älter als 3 Tage) löschen. Dazu habe ich mir ein Konstrukt wie folgt gebaut: [...]
da hilft (eine Zeile): find /pfad/zum/backup/verzeichnis -type f -name '*.tgz' -mtime +2 -exec rm {} \; Dann ersparst Du Dir die ganze Rechnerei. Jan -- Linux-Quickies: http://www.jan-trippler.de PingoS: http://www.pingos.org
![](https://seccdn.libravatar.org/avatar/2eb96e4b1dffe4557742595ef9cc6f66.jpg?s=120&d=mm&r=g)
Johannes Kastl wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hallo,
hab mir zum Anfang mal ein kleines Shellskript gebastelt, das mir jedesmal beim Rauffahren ausgeführt werden soll. Das soll dann überprüfen, ob es eine Backupdatei mit diesem Datum gibt, wenn nicht die dann erstellen.
Gleichzeitig soll das Ding die alten Sachen (alles älter als 3 Tage) löschen. Dazu habe ich mir ein Konstrukt wie folgt gebaut:
while [-e Datei-$altesdatum.tar.gz] do rm Datei-$altesdatum.tar.gz let altesdatum=altesdatum-1 done
[ ... ] Hallo Johannes, Jan hat Dir ja schon eine Zeile Code geschickt, mit der Du die alten Dateien löschen kannst. Ob eine Datei mit aktuellem Datum angelegt ist, kannst Du ja sehr einfach prüfen. Generell gibt es für solche Fälle noch eine andere Lösung (für diesen speziellen Fall wäre sie jedoch etwas aufwendiger). Ich setze sie in einem Print-Accounting-Skript ein. Und zwar wird beim Drucken der eindeutige Tag in die Logdatei geschrieben, ich nutze dabei die Funktion, bis auf 1970 zurückgehen zu können: ----- snip ---- secondsSince1970=`date "+%s"` daysSince1970=`expr $secondsSince1970 / 60 / 60 / 24 ` ----- snip ende ----- So kann - wenn der Print-Tag z.B. länger als 14 Tage her ist - eine Mahnungsmail verschickt werden. Sowohl Skript (als auch Mahnungen ;-)) haben sich bewährt. Viele Grüsse Joachim
![](https://seccdn.libravatar.org/avatar/cade75bc5a38eae7b8d86692a7433a68.jpg?s=120&d=mm&r=g)
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Sunday 11 July 2004 22:02, Johannes Kastl wrote:
Wie kann ich das Problem lösen, also "mit Monaten und Tagen" rechnen? So dass 20040701 nach 20040630 kommt (vielleicht sogar mit Feburar 28 etc.)? Gibt es sowas, oder wie komme ich da raus?
"date" kann auch recht gut mit Datümern rechnen. Mit der geeigneten Formatangabe kann man dann fast alle Probleme lösen: opi:~ # date -d '2002-10-31 10days -50hours' Thu Nov 7 22:00:00 CET 2002 oder opi:~ # eval $(date -d '2002-10-31 10days -50hours' +'y=%Y%nm=%m%nd=%d') opi:~ # echo $d/$m/$y 07/11/2002 Torsten -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) iD8DBQFA8obRwicyCTir8T4RAtNZAJ4o4DSRifLSlPTmRcSTyQdZZqLVIgCgsAdw aKlAXywny9HQ2MRRCtE6YkY= =9o0J -----END PGP SIGNATURE-----
participants (4)
-
Jan.Trippler@t-online.de
-
Joachim Kieferle
-
Johannes Kastl
-
Torsten Foertsch