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 line
para 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.