Tengo los resultados de una simulación numérica que consta de cientos de directorios; cada directorio contiene millones de archivos de texto.
Necesito sustituir la cadena " wavelength; " por " wavelength_bc; ", así que probé lo siguiente:
find . -type f -exec sed -i 's/wavelength;/wavelength_bc;/g' {} \;y
find . -type f -exec sed -i 's/wavelength;/wavelength_bc;/g' {} +Desafortunadamente, los comandos anteriores tardan mucho en finalizar (más de 1 hora).
Me pregunto cómo puedo aprovechar la cantidad de núcleos en mi máquina (8) para acelerar el comando anterior.
Estoy pensando en usar xargs con el indicador -P . Tengo miedo de que eso corrompa los archivos; así que no tengo idea si eso es seguro o no?
En resumen:
sed cuando uso con find ?xargs -P para ejecutar eso en paralelo?Gracias
xargs -P debería ser seguro de usar, sin embargo, deberá usar la opción -print0 de find y canalizar a xargs -0 para abordar los nombres de archivo con espacios o comodines:
find . -type f -print0 | xargs -0 -I {} -P 0 sed -i 's/wavelength;/wavelength_bc;/g' {} -La opción -P 0 en xargs se ejecutará en modo paralelo. Ejecutará tantos procesos como sea posible para su CPU.
Esto podría funcionar para usted (GNU sed y paralelo):
find . -type f | parallel -q sed -i 's/wavelength;/wavelength_bc;/g' {}GNU paralelo ejecutará tantos trabajos como núcleos haya en la máquina en paralelo.
Los usos más sofisticados pueden implicar servidores remotos y transferencia de archivos. Consulte aquí y una hoja de trucos aquí .