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