Ich bin neu in Shell-Skripten. Kann mir jemand helfen? Ich möchte Skripte in einem Ordner vom aktuellen Datum bis zu 10 Tagen löschen. Das Skript sieht folgendermaßen aus:
2012.11.21.09_33_52.script
2012.11.21.09_33_56.script
2012.11.21.09_33_59.script
Das Skript wird bei Crontab alle 10 Tage ausgeführt. Deshalb benötige ich das aktuelle Datum.
find
ist das gebräuchliche Werkzeug für diese Art von Aufgabe:
find ./my_dir -mtime +10 -type f -delete
ERKLÄRUNGEN
./my_dir
Ihr Verzeichnis (durch Ihr eigenes ersetzen)-mtime +10
älter als 10 Tage-type f
nur Dateien-delete
keine Überraschung. Entfernen Sie es, um Ihren find
Filter zu testen, bevor Sie den gesamten Befehl ausführenUnd pass auf, dass ./my_dir
gibt es, um böse Überraschungen zu vermeiden!
Einfach das Shell-Skript aufpeppen, um ältere Dateien zu löschen
#!/bin/bash
timestamp=$(date +%Y%m%d_%H%M%S)
path="/data/backuplog"
filename=log_back_$timestamp.txt
log=$path/$filename
find $path -name "*.txt" -type f -mtime +7 -print -delete >> $log
echo "Backup:: Script Start -- $(date +%Y%m%d_%H%M)" >> $log
START_TIME=$(date +%s)
... code for backup ...or any other operation ....
END_TIME=$(date +%s)
ELAPSED_TIME=$(expr $END_TIME - $START_TIME)
echo "Backup :: Script End -- $(date +%Y%m%d_%H%M)" >> $log
echo "Elapsed Time :: $(date -d 00:00:$ELAPSED_TIME +%Hh:%Mm:%Ss) " >> $log
Der Code baut auf der Antwort von sputnick auf und fügt ein paar weitere Dinge hinzu.
Wenn Sie es sich leisten können, über die Dateidaten zu arbeiten, können Sie es tun
find -mmin +14400 -delete