Rozdíl v rychlosti bude zanedbatelný.
Ale musíte se ujistit, že:
-
Váš skript nebude předpokládat, že nofile bude mít mezeru, tabulátor atd. název vstupního souboru; první verze je bezpečná, druhá ne.
-
Váš skript nebude pracovat se souborem začínajícím "
-
" jako možnost.
Váš kód by tedy měl vypadat takto:
find . -exec cmd -option1 -option2 -- {} +
nebo
find . -print0 | xargs -0 cmd -option1 -option2 --
První verze je kratší a snadněji se píše, protože můžete ignorovat 1, ale druhá verze je přenosnější a bezpečnější, jako "-exec cmd {} +
" je relativně nová možnost v GNU findutils (od roku 2005 ji mnoho běžících systémů ještě nebude mít) a nedávno byla chybná. Také to mnoho lidí neví "-exec cmd {} +
“, jak můžete vidět z jiných odpovědí.
find . | xargs cmd
je efektivnější (běží cmd
co nejméněkrát, na rozdíl od exec
, který spouští cmd
jednou za každý zápas). Pokud však názvy souborů obsahují mezery nebo funky znaky, narazíte na potíže.
Doporučuje se použít následující:
find . -print0 | xargs -0 cmd
to bude fungovat, i když názvy souborů obsahují funky znaky (-print0
dělá find
tisknout shody ukončené NUL, -0
dělá xargs
očekávejte tento formát.)
Moderní xargs
Verze 's často podporují provádění paralelního potrubí.
Je zřejmé, že to může být klíčový bod, pokud jde o volbu mezi find … -exec
a… | xargs