xargs
dělá všechna kouzla:
find . -name test -type d -print0|xargs -0 rm -r --
xargs
provede příkaz předaný jako parametry s argumenty předanými do stdin.
Toto používá rm -r
smazat adresář a všechny jeho potomky.
--
označuje konec argumentů, aby se zabránilo cestě začínající -
aby nebyl považován za argument.
-print0
říká find
vytisknout \0
znaky místo nových řádků; a -0
říká xargs
zacházet pouze s \0
jako oddělovač argumentů.
Toto je volání rm
s mnoha adresáři najednou, čímž se vyhnete režii volání rm
samostatně pro každý adresář.
Alternativně find
může také spustit příkaz pro každou vybranou soubor:
find . -name test -type d -exec rm -r {} \;
A tento s lepším výkonem, protože bude volat rm
s více adresáři najednou :
find . -name test -type d -exec rm -r {} +
(Všimněte si +
na konci; toto je ekvivalentní xargs
řešení.)
find /path/to/dir -name "test" -type d -delete
-
-name: hledá předané jméno. Můžete použít
-regex
pro poskytování jmen na základě regulárních výrazů -
-type: hledá typy souborů.
d
hledá pouze adresáře -
-smazat: akce, která smaže nalezený seznam.
Alternativně:
find /path/to/dir -name "test" -type d -exec rm -rf {} \;
Jak uvádíJ.F. Sebastiana uvedeno v komentářích:
Mohli byste použít +
místo \;
pro předání více než jednoho adresáře najednou.
ještě další způsob, jak to udělat, je
find . -name test -exec rm -R "{}" \;
Užitečný odkaz při hledání:http://www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml