Use arquivos do comando find em lotes paralelos

Use arquivos do comando find em lotes paralelos

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 xargsvocê 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 5sinalizador que limita o número de processos paralelos iniciados a xargscinco, enquanto -n 1é usado para executar o utilitário apenas com uma linha de entrada por vez. Com -I XXdizemos que a linha de entrada, que será um caminho de diretório, deve ser substituída pela string XXno comando.

xargsirá imprimir as invocações à tarmedida que estas são executadas. Remova -tpara desligar isso.

Os nomes dos caminhos dos diretórios são passados find​​e -print0recebidos por xargswith -0(ou seja, usando \0como 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.

informação relacionada