Hi, ist ja lustig, drei Antworten und ich schreib doch noch was dazu :) * Christian Boltz wrote on Wed, Dec 28, 2005 at 19:45 +0100:
Am Mittwoch, 28. Dezember 2005 18:33 schrieb Artur Cichosz:
Gibt es eine Befehlskombination mit der ich den Inhalt eines Verzeichnisses nach Verzeichnissen mit einem bestimmten Namen durchsuchen kann und diese auch gleich rekursiv löschen?.
Konkret will ich eine lokale SVN-Kopie (analog wie eine CVS-Kopie) von den Repository-Informationen befreien - also alle verzeichnisse ".svn" rekursiv löschen.
Habe in meiner Naivität versucht dies durch folgende Befehlskette zu erreichen
cd /directory find ./ -name ".svn" | rmdir
Hat nicht funktioniert.
Klar, weil rmdir seine Parameter nicht auf STDIN erwartet.
und nicht rekursiv arbeitet, sondern ein leeres Verzeichnis erwartet.
Besser funktionieren müsste (ungetestet)
find -name ".svn" -type d -depth -print0 | xargs -0 rmdir
Ich würde: find -name ".svn" -type d -depth -print0 | xargs -0 rm -rf schreiben (wobei -depth hier nicht notwendig ist, aber evtl. Warnungen vermeidet). Das ist notwendig, wenn in den .svn-Verzeichnissen Dateien enthalten sind. Sind es wirklich leere Verzeichnisse, ist rmdir natürlich besser. "... -exec rm -rf {} \;" ist IIRC deutlich langsamer, weil für jede Datei ein rm Prozess gestartet wird. "| xargs -r rm -rf" geht hier vermutlich, weil .svn wohl keine Leerzeichen in Dateinamen enthalten sollte, aber am besten immer "-print0 | xargs -0" angewöhnen, falls man mal ein "Eigene Dateien" oder so löschen/behandeln möchte. Hat Christian ja schon erklärt :)
[...schöne, ausführliche Erklärung...]
oki, Steffen -- Dieses Schreiben wurde maschinell erstellt, es trägt daher weder Unterschrift noch Siegel.