Para cada arquivo, os comandos echo Starting on file foo.txt , mkdir foo , cd foo , longCMD3 ../foo.txt > /dev/null e echo Finished file foo.txt são executados sequencialmente, ou seja, cada comando é iniciado depois que o anterior é concluído.
Os comandos para arquivos diferentes são intercalados. Por padrão, o comando paralelo executa tantos trabalhos em paralelo quanto os núcleos.
No entanto, a saída dos comandos não é intercalada por padrão. É por isso que você não vê muitas linhas "Iniciais" e depois as linhas "Concluídas" correspondentes. Grupos paralelos a saída de cada trabalho em conjunto. Ele armazena a saída até que o trabalho seja concluído. Veja a descrição da opção --group no manual. O agrupamento não faz sentido no seu caso, portanto, desative-o com a opção --ungroup ( -u ) ou mude para o agrupamento de linhas com --line-buffer .
Algumas outras correções:
-
A análise de ls não é confiável . Passe os nomes dos arquivos para
paralleldiretamente. - Se
mkdirfalhar, você não deve continuar. Se algum comando falhar, você deverá providenciar a falha do trabalho. Uma maneira fácil de fazer isso é iniciar o script do job comset -e.
parallel --line-buffer 'set -e; echo Starting on file {}; mkdir {.}; cd {.}; longCMD3 ../{} > /dev/null; echo Finished file {}' ::: *.txt