A iteração recursiva dos arquivos em um diretório pode ser facilmente realizada por:
find . -type f -exec bar {} \;
No entanto, o acima exposto não funciona para coisas mais complexas, onde muitas ramificações condicionais, repetições etc. precisam ser feitas. Eu costumava usar isso para o acima:
while read line; do [...]; done < <(find . -type f)
No entanto, parece que isso não funciona para arquivos que contêm caracteres obscuros:
$ touch $'a\nb'
$ find . -type f
./a?b
Existe uma alternativa que lida bem com caracteres tão obscuros?
read linepara IFS= read -r line. O único caractere que o quebrará é uma nova linha.
-d $'\0'é preferível.
find ... -exec bash -c 'echo filename is in \$0: "$0"' {} \;é a melhor maneira de fazer isso.