Os detalhes dependem da sua configuração. Se o diretório pai contiver somente os diretórios filhos s0001 a s2000, tudo que você precisa é fazer uma iteração sobre eles e iniciar o programa em cada um deles:
for d in s*; do
cd "$dir" && run_program; cd ../;
done
Isso se moverá para cada diretório e lançará run_program
. Uma vez terminado, ele recua.
Se você precisar especificar um intervalo de dirs, use isso:
for dir in s{0001..2000}; do
cd "$dir" && run_program; cd ../
done
Por fim, se você quiser iniciar todos os processos simultaneamente (não que isso possa deixar seu computador de joelhos), use &
:
for dir in s{0001..2000}; do
cd "$dir" && run_program & cd ../
done
As versões mais antigas do bash não expandem {001..002}
como 001 002
, mas como 1 2
. Se o seu bash não suporta isso, use esta abordagem:
seq 1 2000 | while read i; do
dir=$(printf '%0.4d\n' "$i")
cd s"$dir" && run_program; cd ../;
done
O truque é gerar os números entre 1 e 2000 usando seq
e, em seguida, usar printf
para adicionar 0s iniciais conforme necessário.