• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] - Alte Ordner löschen mit Shell-Skript

Hi Leuts,

ich hab ein Datensicherungsskript geschrieben, welches Ordner mit aktuellen Datum und Uhrzeit erstellt. Dies wird täglich ausgeführt. Nun würde ich gerne den "Backup-Müll" von vor zwei Wochen automatisch über ein Skript löschen.

Hierbei würde ich einen Verlgleich anstellen ([Ordner-Name] < 14 Tage). Da ich aber soweit noch nicht bin (wissensmäßig), wollte ich mal Hilfe erfragen.
Vielleicht könnte mir jemand auch gleichzeitig mal eine gute Quelle zum Lernen von Skript-Programmierung geben, so im Stil von SelfHTML oder so, nech... :roll:

Ich versuch mal im Pseudo-Code

Code:
Erselle Ordner bck_DATUM.UHRZEIT

WENN [Verzeichnisname im Oberverzeichnis] <= [Aktuelles Datum - 14 Tage]
       DANN rm -R [Ordername/n]

So in etwas stelle ich mir das vor, aber ich scheitere schon daran überhaupt mir einen bestimmten Ordnernamen rauszusuchen, ohne den Namen genau zu kennen.

Nur zur Info: SuSE 9.3
 

nbkr

Guru
Über das Datum welches im Namen steht zu gehen wäre eine Möglichkeit. Das Dateisystem speichert aber auch an welchem Tag der Ordner zuletzt geändert wurde. Ergo könnte man das auch über find probieren.

Zum Testen:
Code:
find /pfad/zu/den/ordner -type d -mtime +14 > ~/todelete.txt

das sollte alle Ordner die älter als 14 Tage sind in die datei todelete.txt in deinem Homedir schreiben. Wenns da die richtigen reinschreibt kannst Du den Befehl umschreiben:

Code:
find /pfad/zu/den/ordner -type d -mtime +14 > -exec rm -rf {} \;

Das löscht dann die Ordner.
 

nbkr

Guru
Ups, Fipptehler.

So passts:

Code:
find /pfad/zu/den/ordner -type d -mtime +14 -exec rm -rf {} \;
 
Vielen Dank schon mal.

Sieht ja schon recht gut aus, aber ich verstehe das noch nicht zu 100%. Hab mir die Befehle mal aus dem man rausgesucht (also die Optionen zu find), werde aber aus der Umleitung noch nicht ganz schlau.
Gibt es eine Möglichkeit, dass ich das mal teste mit gerade eben erst erstellten Dateien? Ich wüsste dafür nicht welche Multiplikator ich für mtime nehmen müsste. Die Dateien bzw. Ordner wären gerade ein paar Sekunden oder auch Minuten alt. Ich würd das Ganze vorher halt lieber testen, bevor ich das ins Skript einbaue, macht sinn, nech... :wink:

Wie sähe denn die Variante mit dem Dateinamen aus, vielleicht ist diese ja einfacher...
 
Will ich doch meinen...hatte nur vor dem letzten Beitrag die zwei nach deiner nicht mehr gelesen.

was mich stutzig macht ist das {} \ ...das verstehe ich nicht und wie bereits gesagt würde ich gern wissen, wie ich das testen könnte ohne 24 Stunden warten zu müssen....
 

nbkr

Guru
Mit touch kannst Du die Zeitstempel von Ordner und Dateien ändern. Das {} ist ein Platzhalter für das was find findet. So das der Befehl der bei exec angeben ist auch weiß was er löschen muss. Das ; zeigt find das der Befehl welcher von exec ausgeführt werden soll abgeschlossen ist. Der \ ist dafür das ; vor der Shell zu maskieren.
 
(scheiss auf groß- und kleinschreibung :wink: )

aso...

jetzt hab ichs verstanden...vielen dank für die erklärung...ich probiers gleich mal aus und dann sag ich obs geklappt hat.
 
so...klappt ganz super!! vielen dank!!!


leider bekomme ich nach der ausführung die jeweilig zum löschenden ordner angezeigt mit der aussage, dass diese nicht existieren würden. also schein er ja irgendwo was abzufragen, nachdem er gelöscht hat.

ich benutze nun

Code:
find . -type d -mtime +14 -exec rm -rf {} \;

kann mir da jemand noch sagen wie ich diese meldungen wegbekommen?
 
Oben