Uma maneira comum de fazer as coisas com alguns arquivos é - e não me bata por isso:
for f in $(ls); do …
Agora, para estar seguro contra arquivos com espaços ou outros caracteres estranhos, uma maneira ingênua seria:
find . -type f -print0 | while IFS= read -r -d '' file; …
Aqui, -d ''é a abreviação de definir o ASCII NUL como em -d $'\0'.
Mas porque é isso? Por que são ''e $'\0'os mesmos? Isso ocorre devido às raízes C do Bash, com uma string vazia sempre sendo terminada em nulo?
for f in *vez de analisar ls.
for i in $(ls)é terrivelmente estúpido - estou quase com vergonha de ter usado isso como um mau exemplo aqui.
find … -execvez de repetir arquivos, o que funciona na maioria dos casos em que você usaria um loop for. Aqui, findcuida de tudo para você.