GNU/Linux >> Znalost Linux >  >> Linux

find -exec cmd {} + vs | xargs

Rozdíl v rychlosti bude zanedbatelný.

Ale musíte se ujistit, že:

  1. 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.

  2. 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


Linux
  1. Rekurzivní Grep vs Find / -type F -exec Grep {}; Co je efektivnější/rychlejší?

  2. Najít -exec + Vs Najít | Xargs:Který si vybrat?

  3. Tisk názvu souboru spolu s Grep výsledky v Find -exec?

  1. Přeformátování velkého počtu souborů XML?

  2. Jak začlením potrubí | v mém linuxovém příkazu find -exec?

  3. Jak mohu používat aliasované příkazy s xargs?

  1. Odstranění souborů pomocí rm pomocí find a xargs

  2. najít:-exec rm {} \; vs. -delete - proč je první široce doporučován?

  3. Jaká je správná syntaxe find -exec