Fazer não nunca usar:
for d in $(ls)
Use isso:
for d in *
Dois problemas, entre outros, com o uso de $(ls) são que o shell submete os resultados de $(ls) a divisão de palavras e expansão de nome de caminho . No seu caso, foi divisão de palavras que fez com que mozilla foundation se transformasse em mozilla e foundation .
Para uma discussão mais longa sobre o motivo de não usar $(ls) , consulte "O que $(ls *.txt) do? "
Se você precisar considerar o caso em que não há nenhum arquivo não oculto no diretório (o caso em que for i in $(ls) pode parecer melhor, já que ele não passa no loop, em oposição a um passo no loop com * como $i em for i in * (exceto em zsh )), você desejaria dizer ao shell para não expandir para nada para globs não correspondentes:
-
zsh:for i in *(N) -
ksh93:for i in ~(N)* -
bash4.4+:f() { local -; shopt -s nullglob; for i in *; ...; done; }; f(o ponto é usar a opçãonullgloblocalmente (veja também a opçãofailglobpara um comportamento similar ao padrão porzsh)). -
yash:set -o nullglob(e redefinir depois, não há escopo local para opções emyashaté onde eu sei) - em outros shells, você sempre pode adicionar um
[ -e "$i" ] || [ -L "$i" ] || continueno loop para verificar a existência do arquivo.