Un modo comune per fare le cose con un paio di file è — e non colpirmi per questo:
for f in $(ls); do …
Ora, per essere al sicuro dai file con spazi o altri strani personaggi, un modo ingenuo sarebbe fare:
find . -type f -print0 | while IFS= read -r -d '' file; …
Qui -d ''è l'abbreviazione per impostare ASCII NUL come in -d $'\0'.
Ma perché è così? Perché sono ''e $'\0'lo stesso? Ciò è dovuto alle radici C di Bash con una stringa vuota che viene sempre terminata con null?
for f in *invece di analizzare ls.
for i in $(ls)è terribilmente stupido — mi vergogno quasi di averlo usato come un cattivo esempio qui.
find … -execinvece di eseguire il ciclo attorno ai file, il che funziona nella maggior parte dei casi in cui si dovrebbe utilizzare tale ciclo for. Qui, si findprende cura di tutto per te.