La mejor manera de ejecutar un comando en cada archivo en un árbol de directorios

La mejor manera de ejecutar un comando en cada archivo en un árbol de directorios

Parece haber varias formas de hacer esto, incluidos bucles en el script de shell, buscar y xargs. ¿Cuál de estos es mejor y cuál es más portátil?

Respuesta1

find . -exec <command> {} \;

para el directorio actual como raíz del árbol o en general:

find <directory> -exec <command> {} \;

Respuesta2

Utilice la -print0opción para buscar y la -0opción para xargssi tiene nombres de archivos o directorios con espacios:

find {dir} -print0 | xargs -0r {command}

La -print0opción de buscar imprime los nombres de archivos como una NULlista separada por espacios en blanco, mientras que la -0opción xargsle indica que divida su entrada en NULlugar de espacios en blanco. Dado que NULes uno de los caracteres que no está permitido en los nombres de archivos Unix, no hay forma de que se confunda con parte de un nombre de archivo.

La -ropción está ahí para que xargsno le dé un error si no tiene entrada.

Respuesta3

Si la portabilidad es un problema, me mantendría alejado de las formas específicas de hacerlo (hay muchas personas que usan muchos shells diferentes, pero en general, find y xargs son herramientas realmente básicas que nadie se atrevería a cambiar de manera radical). .

El uso de argumentos básicos de find y xargs debería brindarle una solución más portátil.

Respuesta4

Asegúrese de que la versión del comando que está utilizando no tenga un indicador para operación recursiva. :)

información relacionada