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

[gelost]Dateien aus Ordnersystem löschen

ingobulla

Newbie
Hi,

ich würde gerne aus einem Ordner alle Dateien löschen (inklusive der Dateien in Unterordnern), wobei allerdings der Ordner selber und seine Unterordner bestehen bleiben sollen.

Geht das irgendwie mit 'rm' oder muss man da ein Shell-Skript schreiben?
 
A

Anonymous

Gast
Guckst Du hier, eine tolle Übersicht zum Lernen.
http://www.helmbold.de/linux/
ralli
 
A

Anonymous

Gast
ingobulla schrieb:
ich würde gerne aus einem Ordner alle Dateien löschen (inklusive der Dateien in Unterordnern), wobei allerdings der Ordner selber und seine Unterordner bestehen bleiben sollen.

Geht das irgendwie mit 'rm' oder muss man da ein Shell-Skript schreiben?

Ein Script benötigt man dazu nicht, nur ein find das die Dateien sucht und rm zum löschen.

Code:
cd /verzeichnis/das/gelöscht/werden/soll
find . -type f -ls  | more
Auf einigen klenen oder alten oder nicht Linux-Systemen ist es möglich das dieser Befehl einen Fehler bringt. weil find die Option -ls nicht kennt, dann:
Code:
find . -type f -exec ls -l {} \; | more

Damit kannst du dir in aller Ruhe erst einmal anschauen welche Datein er dabei findet, wenn du wirklich diese Dateien alle löschen willst (Voraussetzung natürlich du hast die Rechte auch dazu) dann den letzten Befehl wie folgt abändern.
Code:
find . -type f -exec rm {} \;
der löscht dann wirklich alle Datein auch in allen Unterverzeichnissen, Verzeichnisse bleiben dabei bestehen.
kommt hier jedesmal die Abfrage ob du die Datei wirklich löschen willst, dann den Befehl mit STRG+C abbrechen und bei rm noch die Opton -f vor der geschweiften Klammer dazufügen.

robi
 
Moin robi,

das Löschen über ein exec beim find ausführen zu lassen, sorgt für eine zu starke Last auf dem Rechner da find jedesmal einen child-prozess startet. Wesentlich eleganter ist es das Ergebnis per pipe an xargs für rm weiter zugeben.
Code:
find . -type f | xargs rm
sollte zum gleichen Ergebnis führen. Dabei werden die Treffer von find in die pipe geschickt und find sucht direkt weiter ohne erst auf das Löschen zu warten.

Wenn man statt zu Löschen zB ein grep ausführt, halbiert sich teilweise die Laufzeit des Befehls. Ich selber habe diese Variante noch nicht zum Löschen verwendet also auch dies vorher per ls -l testen!
 
A

Anonymous

Gast
Geier0815 schrieb:
das Löschen über ein exec beim find ausführen zu lassen, sorgt für eine zu starke Last auf dem Rechner da find jedesmal einen child-prozess startet.
Prinzipiell richtig, hält sich aber hier meist in Grenzen selbst bei x00000 Dateien da der Engpass wohl in der Regel beim Zugriff auf die Platte aufschlägt und find im Vordergrund diesbezügleich dabei auch noch ganze Vorarbeit leistet, wer IO- oder Prozesslastige Server betreibt, ist mit deinem Tip aber sehr gut beraten.

Die einzige Last die bei mir bei solchen Befehlen regelmäßig immer aufkommt, ist mein Blutdruck und Herzfrequenz, wenn ich mir kurz nach dem ENTER beim warten auf das Ende des Befehls frage "ich welchem Verzeichnis hast du dich jetzt befunden???" ;) ;) ;)

robi
 
Oben