La diferencia de velocidad será insignificante.
Pero tienes que asegurarte de que:
-
Su secuencia de comandos no asumirá que ningún archivo tendrá espacio, pestaña, etc. en el nombre del archivo; la primera versión es segura, la segunda no lo es.
-
Su secuencia de comandos no tratará un archivo que comience con "
-
" como opción.
Entonces su código debería verse así:
find . -exec cmd -option1 -option2 -- {} +
o
find . -print0 | xargs -0 cmd -option1 -option2 --
La primera versión es más corta y fácil de escribir, ya que puede ignorar 1, pero la segunda versión es más portátil y segura, como "-exec cmd {} +
" es una opción relativamente nueva en GNU findutils (desde 2005, muchos sistemas en ejecución aún no la tendrán) y tuvo errores recientemente. Además, mucha gente no sabe esto "-exec cmd {} +
", como puede ver en otras respuestas.
find . | xargs cmd
es más eficiente (ejecuta cmd
el menor número de veces posible, a diferencia de exec
, que ejecuta cmd
una vez por cada partido). Sin embargo, tendrá problemas si los nombres de archivo contienen espacios o caracteres extraños.
Se sugiere utilizar lo siguiente:
find . -print0 | xargs -0 cmd
esto funcionará incluso si los nombres de archivo contienen caracteres funky (-print0
hace find
imprimir coincidencias terminadas en NUL, -0
hace xargs
espera este formato.)
Moderno xargs
Las versiones de a menudo admiten la ejecución de canalizaciones paralelas.
Obviamente, podría ser un punto de inflexión cuando se trata de elegir entre find … -exec
y … | xargs