Finden und rekursives Löschen von Verzeichnissen mit einem bestimmten Namen
Hallo an alle, kurze Frage, deren Antwort ein Erfahrener vielleicht aus dem Ärmel schüttelt. 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. Hat jemand eine Idee oder vielleicht ein fertiges Script? Ich kann mir vorstellen, dass viele solche Tasks erledigen. Danke im Voraus und einen guten Rutsch für alle. Artur Cichosz
On Wed, 28 Dec 2005, 18:33:24 +0100, Artur Cichosz wrote:
Hallo an alle,
kurze Frage, deren Antwort ein Erfahrener vielleicht aus dem Ärmel schüttelt.
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.
Hat jemand eine Idee oder vielleicht ein fertiges Script? Ich kann mir vorstellen, dass viele solche Tasks erledigen.
find /directory -depth -type d -name .svn | xargs -r rm -rf sollte es tun (das "-depth" ist in deinem Fall nicht wirklich noetig, aber gerade bei solchen rekursiven Loeschaktionen ansonsten immer hilfreich - Details findest du in der Manpage von "find").
Danke im Voraus und einen guten Rutsch für alle.
Danke gleichfalls!
Artur Cichosz
Cheers. l8er manfred
Hi Artur, Am Mi 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.
verwundert nicht wirklich, aber so sollte es eigentlich gehen find /startverzeichnis/ -name ".svn" -type d -exec rm -rf {} \; dein rmdir entsorgt imho nur leere verzeichnisse und das ergebnis von find in ein Kommando pipen ist in Anbetracht der Möglichkeiten von find meist ziemlich sinnfrei. Gruss Falk
Hallo Artur, hallo Leute, 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. Besser funktionieren müsste (ungetestet) find -name ".svn" -type d -depth -print0 | xargs -0 rmdir Erklärung: find - ./ ist bei find Voreinstellung und kann auch weggelassen werden - -type d sorgt dafür, dass nur Verzeichnisse gefunden werden - -depth dreht die Ausgabereihenfolge um - das heißt, Unterverzeichnisse werden zuerst gelistet. Gerade bei rmdir kann sowas wichtig sein. - -print0 trennt die einzelnen Namen mit einem Nullbyte statt Leerzeichen und verhindert so Ärger mit Verzeichnisnamen, die Leerzeichen enthalten find kennt noch mehr Parameter - guck einfach mal in man find ;-) xargs gibt die per STDIN erhaltenen Werte als Parameter an rmdir weiter (also "rmdir eins zwei drei"). Das -0 teilt xargs mit, dass die einzelnen Werte mit einem Nullbyte (siehe oben) getrennt sind. Gruß Christian Boltz --
Gibt es hier in dieser Liste eigentlich ausser mir noch jemanden ?? Nein, aber es laufen einige Robots, die Traffic vortäuschen. Ich bin auch einer davon. [Tobias Korb und Thorsten Haude in suse-programming]
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.
participants (5)
-
Artur Cichosz
-
Christian Boltz
-
Falk Sauer
-
Manfred Hollstein
-
Steffen Dettmer