Dateien in geschachteltem Verzeichnis löschen

xrax

Erfahrenes Mitglied
#1
Hallo zusammen,

ich möchte auf einem Debian-Server alle Dateien löschen die älter als x Wochen sind.
Die Dateien befinden sich in mehreren Ordnern welche Unterordner eines Hauptordners sind.

Ich bekomme das mit Datum und Unterordner nicht auf die Reihe.

Weiss jemand Rat ?

Besten Dank
xrax
 
#2
Moin,

wie schaut denn Dein Ansatz bisher aus :confused:

Gruß
Klaus
 

xrax

Erfahrenes Mitglied
#3
Hallo VFL,

find /var/parent -mtime +7 -exec rm {} \;
Das würde mir alles in parent löschen was älter als 7 Tage ist.

Ich kann auch mit
ls /var/parent -R
die Unterverzeichnisse finden.

Ich möchte aber die files die älter als 7 Tage sind aus diesen Unterverteichnissen löschen.

Besten Dank
xrax
 

deepthroat

Erfahrenes Mitglied
#4
Hi.

Irgendwie ist mir noch unklar was du eigentlich willst bzw. wo dein Problem ist.

find arbeitet rekursiv, d.h. es werden bei deinem Kommando alle Dateien in allen Unterverzeichnissen und auch die Unterverzeichnisse selbst, die älter sind als 7 Tage gelöscht.

Was möchtest du denn jetzt löschen?
 
#6
find /var/parent -mtime +7 -exec rm {} \;
Das würde mir alles in parent löschen was älter als 7 Tage ist.
Der Aufruf hat so derzeit ein paar Probleme: Er findet (und löscht) auch Sachen, die keine Dateien sind, und er hat Probleme mit Leerzeichen im Dateinamen. Das geht so weit, daß er die falschen Dateien löschen würde.

Ich würds daher so schreiben:
Code:
find /var/parent -mtime +7 -type f -print0 |xargs -0 rm
Alternativ kann man wohl auch
Code:
find /var/parent -mtime +7 -type f -delete
schreiben, wenn man ohne die Pipe auskommen mag.
 

xrax

Erfahrenes Mitglied
#7
ok, sagt mir leider alles nicht viel. Will sagen, ich kann die Lösungen nicht bewerten.
Wo kann ich denn sowas nachlesen/lernen ?

Besten Dank
xrax
 
#8
ok, sagt mir leider alles nicht viel. Will sagen, ich kann die Lösungen nicht bewerten.
Wo kann ich denn sowas nachlesen/lernen ?
Die Manpage von find ( "man find" auf der Konsole eintippen) ist sehr umfangreich und leicht zu lesen, meiner Meinung nach.

Zur Erläuterung: Wenn du in einem Verzeichnis drei Dateien "A", "B" sowie "A B" hast und dein Find-Aufruf nur "A B" löschen soll, dann würde er
Code:
rm A B
aufrufen. Und rm löscht dann "A" sowie "B". Nicht wie gedacht, oder?

Das umgehe ich, indem ich find mit -print0 aufrufe, damit gibt mir find die Dateinamen als sogenannte nullterminierte Strings aus, also ein besonderes Zeichen am Ende jedes Dateinamens. "xargs -0 rm" ruft nun für jeden nullterminierten String rm auf. Damit sind auch Leerzeichen im Dateinamen kein Problem mehr.

Zum Thema "löscht mehr weg": Unter Linux ist alles eine Datei. Deswegen findet dein find-ausdruck eventuell auch Verzeichnisse. Die werden zwar nicht gelöscht, weil rm da einen Sicherheitsmechanismus hat, aber eine Fehlermeldung wird es trotzdem geben. Der Find-Ausdruck "-type f" filtert alles bis auf "reguläre Dateien". Auch hier ist die Manpage von find sehr informativ, was neben normalen Dateien alles in einem Linux-Dateisystem herumliegen kann…

Ich hoffe, ich konnte ein wenig helfen.