La differenza di velocità sarà insignificante.
Ma devi assicurarti che:
-
Il tuo script non presupporrà che nessun file conterrà spazio, tabulazione, ecc. nel nome del file; la prima versione è sicura, la seconda no.
-
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