Portál AbcLinuxu, 4. května 2025 17:27
-exec
při větším množství souborů není nejlepším řešením. Zbytečně se tím prodlužuje vykonávání příkazu.
rm
(v případě varianty find ... -exec
), kdy se rm
spouští pro každý soubor znovu. V případě varianty s xargs
smaže rm
více nalezených souborů najednou.
Ten první případ s -exec
je tedy něco jako find... | xargs -n1 ...
Záleží na tom, jestli se použije
find ... -exec ... \;
nebo
find ... -exec ... +
nebo dokonce
find ... -delete
Ale ne všechy implementace to podporují.
echo
interní příkaz shellu.
$ echo `find`
---výpis---
$ /bin/echo `find`
bash: /bin/echo: Argument list too long
V tom případě ale pořád nechápu proč by interní příkaz shellu měl mít neomezeně dlouhé argumenty.
execve()
, takže pak problém nevznikne ani u externího příkazu.
xargs
řeší problém "argument list too long" tak, že ten příkaz v případě potřeby spustí víckrát...
find
vypisuje cesty oddělené \n a vy předáváte xargs
přepínač -0
, takže hledá oddělovač \0. Takhle je to správně:
find -print0 | xargs -0 /bin/cat
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.