GNU/Linux >> Linux Esercitazione >  >> Linux

trova -exec cmd {} + vs | xargs

La differenza di velocità sarà insignificante.

Ma devi assicurarti che:

  1. Il tuo script non presupporrà che nessun file conterrà spazio, tabulazione, ecc. nel nome del file; la prima versione è sicura, la seconda no.

  2. Il tuo script non tratterà un file che inizia con "- " come opzione.

Quindi il tuo codice dovrebbe assomigliare a questo:

find . -exec cmd -option1 -option2 -- {} +

o

find . -print0 | xargs -0 cmd -option1 -option2 --

La prima versione è più breve e più facile da scrivere in quanto puoi ignorare 1, ma la seconda versione è più portabile e sicura, come "-exec cmd {} + " è un'opzione relativamente nuova in GNU findutils (dal 2005, molti sistemi in esecuzione non l'avranno ancora) ed è stata recentemente danneggiata. Inoltre molte persone non lo sanno "-exec cmd {} + ", come puoi vedere da altre risposte.


find . | xargs cmd

è più efficiente (esegue cmd il minor numero di volte possibile, a differenza di exec , che esegue cmd una volta per ogni partita). Tuttavia, ti imbatterai in problemi se i nomi dei file contengono spazi o caratteri strani.

Si consiglia di utilizzare quanto segue:

find . -print0 | xargs -0 cmd

questo funzionerà anche se i nomi dei file contengono caratteri funky (-print0 rende find stampa corrispondenze con terminazione NUL, -0 rende xargs aspettati questo formato.)


xargs moderno le versioni di spesso supportano l'esecuzione di pipeline parallele.

Ovviamente potrebbe essere un punto di svolta quando si tratta di scegliere tra find … -exec e… | xargs


Linux
  1. Trova -exec + Vs Trova | Xargs:quale scegliere?

  2. La stampa del nome del file insieme ai risultati di Grep in Find -exec?

  3. Rompere la ricerca se un -exec fallisce?

  4. Riformattare un gran numero di file XML?

  5. trova e copia il file usando Bash

Comando Xargs in Linux

Come includo una pipa | nel mio comando linux find -exec?

Come posso usare i comandi con alias con xargs?

Usando sia il nome di base che il percorso completo in find -exec

Come eseguo più comandi quando utilizzo find?

Qual è la sintassi corretta di find -exec