cancel - save and exit vim linux
find-exec cmd{}+vs | xargs (3)
La diferencia de velocidad será insignificante.
Pero debes asegurarte de que:
Su secuencia de comandos no supondrá que ningún archivo tendrá espacio, pestaña, etc. en el nombre del archivo; la primera versión es segura, la segunda no.
Su script no tratará un archivo que comience con "
-
" como una 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, ya que " -exec cmd {} +
" es una opción relativamente nueva en findutils de GNU (desde 2005, muchos sistemas en ejecución) no lo tendrá todavía) y fue con errores recientemente . También mucha gente no sabe esto " -exec cmd {} +
", como se puede ver en otras respuestas.
¿Cuál es más eficiente en un gran conjunto de archivos y debería usarse?
find . -exec cmd {} +
o
find . | xargs cmd
(Supongamos que no hay personajes divertidos en los nombres de archivo)
Las versiones modernas de xargs
menudo admiten la ejecución paralela de tuberías.
Obviamente, podría ser un punto de pivote cuando se trata de elegir entre find … -exec
y … | xargs
… | xargs
find . | xargs cmd
es más eficiente (ejecuta cmd
menor número de veces posible, a diferencia de exec
, que ejecuta cmd
una vez para cada coincidencia). Sin embargo, se encontrará con problemas si los nombres de archivo contienen espacios o caracteres funky.
Se sugiere utilizar lo siguiente:
find . -print0 | xargs -0 cmd
esto funcionará incluso si los nombres de archivo contienen caracteres funky ( -print0
hace que coincidan las coincidencias que terminan con NUL, -0
hace que xargs
espere este formato).