Use arquivos do comando find em lotes paralelos

1

Eu tenho este código para procurar por dirs na pasta atual e depois tar

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 corra em lote de 5 em paralelo

    
por user3214546 29.10.2016 / 00:37

1 resposta

0

Usando xargs , você pode alcançar um certo paralelismo:

find . -type d -maxdepth 1 -mindepth 1 -print0 |
xargs -t0 -n 1 -P 5 -I XX tar czf XX.tar.gz XX

É o sinal -P 5 que limita o número de processos paralelos iniciados por xargs a 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 imprimirá as invocações de tar conforme forem executadas. Remova -t para desativar isso.

Os nomes de caminho do diretório são transmitidos de find com -print0 e recebidos por xargs com -0 (ou seja, usando %code% como delimitador) para permitir nomes possivelmente exóticos.

Como apontado em uma resposta em outra parte deste site :

Note that the bottleneck of the operation would likely be the hard drive. For that reason, even if you did split the task in two or more processes, it would not go faster unless they operate on different drives.

    
por 10.09.2017 / 08:39