
Ich bin ein Neuling in Sachen Bash-Scripting und komme mit der Find-Methode von Ubuntu nicht weiter. Ich möchte in dem Ordner /opt/
nach allen Ordnern suchen, um zu sehen, ob sie älter als ein bestimmtes Datum sind. Wenn sie älter sind, sollten die Dateien in diesem Ordner entfernt werden (und eigentlich auch der Ordner selbst). Wenn das Datum noch zu neu ist, sollten die Dateien nicht berührt werden.
Was ich im Code habe:
find $BACKUP_DIR -maxdepth 1 -mtime +$DAYS_TO_KEEP -name "*$mystring" -exec rm -rf '{}' ';'
Die Variablen enthalten diese Werte:
BACKUP_DIR=/opt/
TESTDIR=2014-11-25-daily_testmachine
mystring=-daily_testmachine
Wenn die Variable $DAYS_TO_KEEP
2 ist, lautet das Datum 25.11.2014 und der Ordnername ist 2014-11-20-daily_testmachine
der Ordner und sein Inhalt sollte gelöscht werden.
Was mache ich falsch, dass Find diese zu entfernenden Dateien und Ordner nicht entfernt/findet? Ich kann den Fehler scheinbar nicht finden.
Notiz:Wenn ich den Befehl mit dem genauen Stringnamen des Ordners darin ausführe, wird der Ordner gelöscht. Also stimmt etwas mit meinem Format oder meiner Benennung nicht.
find $BACKUP_DIR -maxdepth 1 -name "2014-11-20-daily_testmachine" -exec rm -rf '{}' ';'
Zur Verdeutlichung habe ich einen Screenshot gemacht, der das Setup zeigt:
Antwort1
Mein Fehler war ein Logikfehler mit -mtime
. Ich dachte, mein Skript würde die Namen prüfen, aber -mtime
es prüft das Datum, an dem die Datei erstellt wurde. Also mein endgültiger Code:
DAYS_TO_KEEP=2
find $BACKUP_DIR -maxdepth 1 -mtime +"$DAYS_TO_KEEP" -exec rm -rf {} \;
Ich musste nur ein tun, sudo touch -d "3 days ago" /filepath/folderToRemove
um -mname
den Ordner zu findenUndStellen Sie sicher, dass die Datei alt genug war, um entfernt zu werden. Dieser letzte Code entfernt also alle Ordner, die älter sind als meine Variable$DAYS_TO_KEEP