Não gere nomes de arquivos com uma substituição de comando: isso será interrompido se os nomes dos arquivos contiverem espaço em branco ou \[?* .
Com o bash ≥4, ksh93 ou zsh, é possível evitar a maioria dos usos de find que usam apenas -type d ou -name … usando predicados ** glob para corresponder subdiretórios em qualquer profundidade. No bash, execute shopt -s globstar primeiro. Em ksh, execute set -o globstar primeiro.
for dir in **/; do …; done
Portavelmente ou, nos casos em que você precisar de mais, use find … -exec … + ou find … -print0 | xargs -0 … . Essa abordagem tem o benefício adicional de executar find um pouco em paralelo com a ação nos arquivos, embora isso só se torne verdade para árvores de diretório grandes (pelo menos milhares de arquivos correspondentes). Você pode fazer com que find ou xargs executem um shell se precisar fazer mais do que executar um comando.
find -type d -exec sh -c 'for x in "$@"; do echo "$x"; done' _ {} +
(Esse _ é $0 no fragmento do shell, que não usamos.)