PDA

View Full Version : ifs, qsh, Dateien in Unterverzeichnissen löschen



programmer400
16-10-11, 13:22
Eine AS/400 wird als Fileserver verwendet, jetzt haben sich im Laufe der Jahre in x Unterverzeichnissen ca. 500 *.tmp und ~*.* Dateien angesammelt, die ich löschen möchte.

Ich hab schon mit qsh herumgebastelt, komm aber nicht drauf, wie ich den Befehl zusammenstellen muss, um z.B. *.tmp in allen Unterverzeichnissen zu löschen.

Bitte um Hilfe.

bateau
16-10-11, 17:56
Schéine gudde Moien,

das ist mit "find" in der Qsh ganz einfach :

find /mein/verzeichnis -name *.tmp -exec rm {} \;

Kleine Erläuterung :

"find" dient zur Suche nach Dateien/Verzeichnissen unter Angabe verschiedenster Suchkriterien.

Das erste Argument (in diesem Beispiel "/mein/verzeichnis") ist der Name des Verzeichnisses, innerhalb dessen rekursiv(!) gesucht werden soll. Rekursiv bedeutet also, dass alle Unterverzeichnisse durchsucht werden.

Der Parameter "-name" gefolgt von einer Suchmaske ("*.tmp") gibt an, dass nach Dateien/Verzeichnissen mit einem bestimmten Namensmuster gesucht werden soll. Zusätzlich könnte man, will man nur Dateien und keine (Unter)Verzeichnisse löschen, noch den Parameter "-type f" (=directory) angeben, somit würden nur reguläre Dateien gefunden/ausgewählt.

James Last but not least kann man das Argument "-exec" dazu benutzen, beliebige Befehle auf jedes einzelne Suchergebnis (also jede einzelne "*.tmp" Datei in obigem Beispiel) loszulassen. Der "rm" (remove) Befehl löscht die Datei ganz einfach. Das im ersten Moment etwas komisch anmutende "{}" dahinter wird vom "find" Kommando zur Ausführungszeit durch den gefundenen Dateinamen ersetzt und das "\;" schliesst die Kommandosequenz ab, so dass "find" weiss, wo/wann Schluss ist. Man kann nämlich beliebig viele Kommandos durch Semikolons separiert aufeinander folgen lassen.

Grüsse und erfolgreiches Putzen

-Martin

KingofKning
17-10-11, 09:02
Manchmal sind gute Linux Kenntnisse durch nichts zu ersetzen. Wobei ich mich nie damit anfreunden konnte...

GG

cbe
19-10-11, 09:28
evtl. ist der Parameter -ctime noch interessant, um die Dateien erst z.B. nach 30 Tagen zu löschen:


QSH CMD('find ... -ctime +30 -exec rm {} \;')
(löscht alle Dateien in /tmp die mit $ anfangen nach 30 Tagen)

Den Tip habe ich auch aus dem Forum irgendwann mal bekommen - ist schon klasse, wieviel Wissen + Ideen hier zusammen kommen!!

Gruß, Christian