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çãonullglob
localmente (veja também a opçãofailglob
para um comportamento similar ao padrão porzsh
)). -
yash
:set -o nullglob
(e redefinir depois, não há escopo local para opções emyash
até onde eu sei) - em outros shells, você sempre pode adicionar um
[ -e "$i" ] || [ -L "$i" ] || continue
no loop para verificar a existência do arquivo.