Quero processar muitos arquivos e, como aqui tenho vários núcleos, quero fazê-lo em paralelo:
for i in *.myfiles; do do_something $i `derived_params $i` other_params; done
Conheço uma solução Makefile , mas meus comandos precisam dos argumentos da lista de globbing do shell. O que eu encontrei é:
> function pwait() {
> while [ $(jobs -p | wc -l) -ge $1 ]; do
> sleep 1
> done
> }
>
Para usá-lo, basta colocar e após os trabalhos e uma chamada em espera, o parâmetro fornece o número de processos paralelos:
> for i in *; do
> do_something $i &
> pwait 10
> done
Mas isso não funciona muito bem, por exemplo, eu tentei com, por exemplo, um loop for convertendo muitos arquivos, mas com erros e deixando os trabalhos desfeitos.
Não posso acreditar que isso ainda não tenha sido feito, já que a discussão na lista de discussão do zsh já é antiga. Então você conhece melhor?
echo "DONE"
após o loop, que era executado antes dos trabalhos ativos não serem concluídos. => Isso me fez pensar que os trabalhos não foram feitos.