Parece que hay varias formas de hacerlo, incluidos los bucles en el script de shell, find y xargs. ¿Cuál de estos es el mejor y cuál es el más portátil?
command-line
scripting
directory
find
Brian Lyttle
fuente
fuente
-name "*.c"
o por ejemplo-type d
para directorios ...find ... | xargs ...
idioma, procesa los archivos en lotes, y esto generalmente será más rápido (menos procesos iniciados).Use la
-print0
opción para buscar y la-0
opciónxargs
si tiene nombres de archivo o directorio con espacios:La
-print0
opción para buscar imprime los nombres de archivo como unaNUL
lista separada por espacios en blanco en lugar de espacios en blanco, mientras que la-0
opción paraxargs
indicar que rompa su entrada enNUL
lugar de espacios en blanco. Dado queNUL
es uno de los caracteres que no está permitido en los nombres de archivo Unix, no hay forma de que se confunda con parte de un nombre de archivo.La
-r
opción está ahí para quexargs
no le dé un error si no tiene entrada.fuente
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 proporcionarle una solución más portátil.
fuente
Si la agrupación de argumentos es aceptable, busque | xargs probablemente dará un mejor rendimiento, ya que ejecutará el comando muchas menos veces que find -exec. Si desea ejecutar el comando cada vez para cada archivo o ejecutar en el subdirectorio del archivo, probablemente debería usar find -exec o -execdir.
Como regla general, es preferible mantenerse alejado de los bucles específicos de shell; find & xargs son suficientes para la mayoría de los escenarios.
fuente
Asegúrese de que la versión del comando que está utilizando no tenga una marca para la operación recursiva. :)
fuente
Funciona mejor para mi.
fuente