Em bash
e shells semelhantes a Bourne em geral ( zsh
sendo a exceção), globs como *
que não correspondem a nenhum arquivo expandem para si mesmos (seu script usa ksh93
sintaxe, também reconhecido por bash
e zsh
, embora em zsh
você tenha erros fatais por padrão para globs não correspondentes.
echo *
em um diretório que não contém arquivos (ou apenas arquivos ocultos) gera *
.
Aqui, em vez de for i in *
, use for i in *(N)
( zsh
) ou for i in ~(N)*
( ksh93
) ou, se usar bash
, defina a opção nullglob (com shopt -s nullglob
) para que as bolas que não combinam se expandirem não façam nada.
Como alternativa, você pode adicionar um [ -e "$i" ] || continue
no início ou seu for
loop para filtrar o *
verificando a existência do arquivo (isso afetaria o comportamento dos diretórios que você leu, mas não as permissões de pesquisa) .
Mais leitura em Por que o nullglob não é padrão?
¹ Nesses diretórios, *
se expandiria para todos os arquivos não ocultos, mas [ -e "$i" ]
retornaria false para todos eles, pois a chamada de sistema stat()
retornaria com permissão negada