GNU/Linux >> Tutoriales Linux >  >> Linux

encontrar -exec cmd {} + vs | xargs

La diferencia de velocidad será insignificante.

Pero tienes que asegurarte de que:

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

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


Linux
  1. Grep recursivo Vs Find / -type F -exec Grep {}; ¿Cuál es más eficiente/más rápido?

  2. Buscar -exec + Vs Buscar | Xargs:¿Cuál elegir?

  3. ¿Obteniendo la opción -exec en Find To Work?

  4. Escapar de los caracteres desconocidos de la cadena para -exec?

  5. Manipular {} Cadena de retorno de Find -exec?

Comando Xargs en Linux

¿Salir de Find si falla un -exec?

¿Reformatear una gran cantidad de archivos Xml?

buscar y copiar archivos usando Bash

find -exec una función de shell en Linux?

Eliminar archivos con rm usando find y xargs