Solução usando Paralelo
Você poderia usar o GNU Parallel para uma solução compacta e mais rápida.
find . -type d -print0 | parallel -0 cd {}'&&' <command-name>
Isso funcionará absolutamente bem, mesmo para nomes de diretório contendo espaços e novas linhas. O que o parallel
faz aqui é que ele pega a saída de find
, que é todo diretório e, em seguida, o alimenta para o cd usando {}
. Em seguida, se a alteração do diretório for bem-sucedida, um comando separado será executado nesse diretório.
Solução Regular usando loop while
find "$PWD" -type d | while read -r line; do cd "$line" && <command-name>; done;
Observe que $PWD
é usado aqui porque essa variável contém o caminho absoluto do diretório atual de onde o comando está sendo executado. Se você não usar o caminho absoluto, então cd
poderá lançar erro no loop while.
Esta é uma solução mais fácil. Ele funcionará na maior parte do tempo, exceto quando os nomes de diretórios contiverem caracteres estranhos, como novas linhas (veja os comentários).