Eu tenho esse código para procurar diretórios na pasta atual e depois tará-lo
find . -type d -maxdepth 1 -mindepth 1 -print -exec tar czf {}.tar.gz {} \;
Eu tenho centenas de pastas e atualmente ele faz uma por uma pasta.
É possível que eu possa rodar em lote de 5 em paralelo
Responder1
Usando xargs
você pode atingir um certo grau de paralelismo:
find . -type d -maxdepth 1 -mindepth 1 -print0 |
xargs -t0 -n 1 -P 5 -I XX tar czf XX.tar.gz XX
É o -P 5
sinalizador que limita o número de processos paralelos iniciados a xargs
cinco, enquanto -n 1
é usado para executar o utilitário apenas com uma linha de entrada por vez. Com -I XX
dizemos que a linha de entrada, que será um caminho de diretório, deve ser substituída pela string XX
no comando.
xargs
irá imprimir as invocações à tar
medida que estas são executadas. Remova -t
para desligar isso.
Os nomes dos caminhos dos diretórios são passados find
e -print0
recebidos por xargs
with -0
(ou seja, usando \0
como delimitador) para permitir nomes possivelmente exóticos.
Como apontadoem uma resposta em outro lugar deste site:
Observe que o gargalo da operação provavelmente seria o disco rígido. Por esse motivo, mesmo que você dividisse a tarefa em dois ou mais processos, ela não seria mais rápida, a menos que eles operassem em unidades diferentes.