
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 -print0
opción para buscar y la -0
opción para xargs
si tiene nombres de archivos o directorios con espacios:
find {dir} -print0 | xargs -0r {command}
La -print0
opción de buscar imprime los nombres de archivos como una NUL
lista separada por espacios en blanco, mientras que la -0
opción xargs
le indica que divida su entrada en NUL
lugar de espacios en blanco. Dado que NUL
es 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 -r
opción está ahí para que xargs
no 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. :)