Você pode ir para xargs . Primeiro, alimente-o com os arquivos através de um pipe no stdin e, em seguida, use os argumentos com um executável, enquanto mantém o controle do paralelismo, definindo o número máximo de processos a serem usados.
printf "%sprintf "%s%pre%" _the_right_dir_/* | xargs -0 -I@ -P500 ./my_script.pl @ file_2 @file_3
" _the_right_dir_/* | xargs -0 -I@ -P500 ./my_script.pl @ file_2 @file_3
-0 informa xargs que a entrada é separada por NUL.
-I@ define o símbolo de substituição. No efeito, o segundo @ no lado direito do pipe ( | ) é substituído por um nome de arquivo. Então aparece mais uma vez em @file_3 para demonstrar que você pode usar @ mais uma vez no mesmo comando. Aqui para produzir o nome do arquivo de saída.
-P500 significa no máximo 500 processos para serem executados ao mesmo tempo.
Por fim, printf "%s lista os arquivos de diretório que os separam dos NULs. Então xargs" _the_right_dir_/*./my_script.pl os toma um por um e os usa como argumentos para %code% .