O idioma usual é
for d in Parent_dir/*/
do
(cd "$d" && $command)
done
O loop for
é executado uma vez para cada diretório diretamente em Parent_dir
. Para cada um desses diretórios, um sub-shell é gerado; no sub-shell, tentamos mudar para esse diretório (o que pode falhar, por exemplo, se tivermos permissão insuficiente) e, se tivermos sucesso, executar o comando. Quer tenhamos ou não conseguido, o cd
não tem efeito no shell pai, por isso não precisamos nos preocupar em estar no lugar errado.
Se você quiser torná-lo mais robusto, você pode
(cd "$d" && test -r acc.bam && $command)
para garantir que acc.bam
exista e seja legível nesse diretório. Você também pode adicionar um test -w .
para evitar a execução do comando em diretórios que não são graváveis.
P.S. Nenhuma das opções acima é específica da Bash; você pode usar / bin / sh para portável.