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
-regex
verwenden zur Bereitstellung von Namen basierend auf regulären Ausdrücken -
-Typ: sucht nach Dateitypen.
d
sucht 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