Tengo este código para buscar directorios en la carpeta actual y luego tarlo
find . -type d -maxdepth 1 -mindepth 1 -print -exec tar czf {}.tar.gz {} \;
Tengo cientos de carpetas y actualmente lo hace una por una.
¿Es posible que pueda ejecutar un lote de 5 en paralelo?
Respuesta1
Usando xargs
usted puede lograr un grado de paralelismo:
find . -type d -maxdepth 1 -mindepth 1 -print0 |
xargs -t0 -n 1 -P 5 -I XX tar czf XX.tar.gz XX
Es la bandera que limita a cinco -P 5
el número de procesos paralelos iniciados , mientras que se usa para ejecutar la utilidad solo con una línea de entrada a la vez. Con decimos que la línea de entrada, que será una ruta de directorio, debe sustituirse por la cadena en el comando.xargs
-n 1
-I XX
XX
xargs
imprimirá las invocaciones de tar
a medida que se realicen. Quitar -t
para desactivar esto.
Los nombres de ruta del directorio se pasan desde find
y -print0
se reciben xargs
con -0
(es decir, se usan \0
como delimitador) para permitir nombres posiblemente exóticos.
Como se ha señaladoen una respuesta en otra parte de este sitio:
Tenga en cuenta que el cuello de botella de la operación probablemente sea el disco duro. Por esa razón, incluso si dividiera la tarea en dos o más procesos, no sería más rápido a menos que operen en unidades diferentes.