
Ich habe dieses einfache Skript erstellt:
#/bin/bash
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
tar -czvf /kopie/bin-$DATE.tar /bin
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
rm -f /kopie/bin-$DATE*.tar
Ich habe ein Problem mit der letzten Zeile des Skripts. Der Befehl rm funktioniert nicht, er löscht die Datei nicht. Das Datum „vor 2 Stunden“ funktioniert einwandfrei, es liegt also kein Problem damit vor.
Antwort1
Sie scheinen den Dateinamen auf zwei verschiedene Arten anzugeben:
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
Oben steht zB zwischen Jahr und Stunde ein _.
Das von Ihnen generierte Datum hatte jedoch ein anderes Format:
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
Dies würde jedoch immer noch nicht das inhärente Problem lösen, "ein Date" zu bekommenmehr oder wenigervor zwei Stunden“, weil die Zeitspanne von 13:00:00 bis 12:59:59 nur eine Sekunde beträgt und dies ohnehin nicht mit dem Muster „2017-11-20_13*“ übereinstimmt.
Ich würde Folgendes in Betracht ziehen find
:
find . -name "*.tar" -maxdepth 0 -cmin +120 -delete
sollte alle *.tar-Dateien im aktuellen Verzeichnis löschen, die älter als zwei Stunden sind (verwenden Sie +119, um eine Karenzzeit von einer Minute zu erhalten). Sie können es auch weglassen, -delete
wenn Sie testen, ob dieser Ansatz funktioniert.
Antwort2
Ich glaube, das Problem liegt an der Erweiterung der $DATE
Variablen in der letzten Zeile. Um dies zu testen, können Sie einfach echo
vor dem rm
Befehl ein hinzufügen und das Skript ausführen, oder Sie können versuchen, das Problem zu vermeiden, indem Sie im Befehl ${DATE}
anstelle von verwenden .$DATE
rm
Das Problem könnte auch darin bestehen, dass Sie versuchen, einen Dateinamen zu löschen, der nicht existiert, da Sie anscheinend zwei unterschiedliche Datumsausgabeformate angegeben haben und ich davon ausgehe, dass die Datumsformate zwischen der Erstellung der TAR-Datei und der Löschung zwei Stunden später übereinstimmen sollten.