how cancel and linux unix command-line find

cancel - save and exit vim linux



find-exec cmd{}+vs | xargs (3)

La diferencia de velocidad será insignificante.

Pero debes asegurarte de que:

  1. 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.

  2. 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).