La iteración recursiva a través de los archivos en un directorio se puede hacer fácilmente mediante:
find . -type f -exec bar {} \;
Sin embargo, lo anterior no funciona para cosas más complejas, donde es necesario realizar muchas ramas condicionales, bucles, etc. Solía usar esto para lo anterior:
while read line; do [...]; done < <(find . -type f)
Sin embargo, parece que esto no funciona para archivos que contienen caracteres oscuros:
$ touch $'a\nb'
$ find . -type f
./a?b
¿Hay alguna alternativa que maneje bien a personajes tan oscuros?
read line
a IFS= read -r line
. El único personaje que lo romperá es una nueva línea.
-d $'\0'
es preferible.
find ... -exec bash -c 'echo filename is in \$0: "$0"' {} \;
Es una mejor manera de hacerlo.