Una forma común de hacer cosas con un par de archivos es, y no me pegue por eso:
for f in $(ls); do …
Ahora, para estar a salvo de archivos con espacios u otros caracteres extraños, una forma ingenua sería hacer:
find . -type f -print0 | while IFS= read -r -d '' file; …
Aquí, la -d ''abreviatura es para configurar el ASCII NUL como en -d $'\0'.
¿Pero por qué es así? ¿Por qué son ''y $'\0'lo mismo? ¿Se debe a que las raíces C de Bash con una cadena vacía siempre están terminadas en nulo?
for f in *lugar de analizar ls.
for i in $(ls)es terriblemente estúpido, estoy casi avergonzado de haberlo usado como un mal ejemplo aquí.
find … -execlugar de recorrer los archivos, lo que funciona para la mayoría de los casos en los que usaría un bucle for. Aquí, findse encarga de todo por ti.