GNU paralelo é a ferramenta que você está procurando. O autor, Ole Tange , é um regular aqui e escreveu várias boas respostas para questions about it
A versão do GNU de xargs
de findutils
também tem algumas opções para executar vários trabalhos em paralelo. É provavelmente mais fácil de usar para tarefas simples como a sua, mas nem de longe tão flexível ou capaz como parallel
.
Por exemplo:
find . -maxdepth 1 -type f -name 'a_file_*' -print0 |
xargs -0r -L 1 -P 4 sh -c '/usr/bin/md5sum "$1" > "$1.md5sum"' {}
Isso executará até 4 md5sum
trabalhos em paralelo ( -P 4
). Eu também usei a opção -L 1
para limitar cada trabalho ao processamento de um nome de arquivo de cada vez - sem isso (caso contrário, ele só executaria 1 tarefa com 1000 nomes de arquivos)