xargs macht die ganze Magie:
find . -name test -type d -print0|xargs -0 rm -r --
xargs führt den als Parameter übergebenen Befehl mit den an stdin übergebenen Argumenten aus.
Dies verwendet rm -r um das Verzeichnis und alle seine Kinder zu löschen.
Die -- bezeichnet das Ende der Argumente, um einen Pfad zu vermeiden, der mit - beginnt nicht als Argument behandelt werden.
-print0 sagt find um \0 zu drucken Zeichen statt Zeilenumbrüche; und -0 sagt xargs nur \0 zu behandeln als Argumenttrennzeichen.
Dies ruft rm an mit vielen Verzeichnissen gleichzeitig, wodurch der Overhead des Aufrufs von rm vermieden wird getrennt für jedes Verzeichnis.
Alternativ find kann auch einen Befehl für jede ausgewählte ausführen Datei:
find . -name test -type d -exec rm -r {} \;
Und dieses mit besserer Leistung, da es rm aufruft mit mehreren Verzeichnissen gleichzeitig :
find . -name test -type d -exec rm -r {} +
(Beachten Sie die + Am Ende; dieser entspricht dem xargs Lösung.)
find /path/to/dir -name "test" -type d -delete
-
-name: sucht nach dem übergebenen Namen. Sie können
-regexverwenden zur Bereitstellung von Namen basierend auf regulären Ausdrücken -
-Typ: sucht nach Dateitypen.
dsucht nur nach Verzeichnissen -
-löschen: Aktion, die die gefundene Liste löscht.
Alternativ:
find /path/to/dir -name "test" -type d -exec rm -rf {} \;
Als J.F. Sebastian in den Kommentaren angegeben:
Sie könnten + verwenden statt \; um mehr als ein Verzeichnis gleichzeitig zu übergeben.
noch eine andere Möglichkeit, dies zu tun, ist
find . -name test -exec rm -R "{}" \;
Ein hilfreicher Link zum Finden:http://www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml