Não analise ls
! Em vez disso, use um glob :
for name in ./*; do
Existem outras maneiras de melhorar o script também.
- No loop, novamente, não analise
ls
. Em vez disso, usestat
para obter as permissões diretamente. 1 - Use a nova sintaxe de substituição de comandos
$(...)
em vez de backticks reprovados'...'
- Defina uma variável
$perms
para tornar a sequência de impressão um pouco mais limpa e mais fácil de ler.
Então:
for name in ./*; do
perms="$(stat -c "%A" "$name")"
echo "The file $name has the following permissions: $perms"
done
Notas de rodapé:
-
Se
stat
não existisse, e você tivesse que obter as permissões dels
, você daria a ele o nome do arquivo como um argumento e usaria o-d
flag para que ele não caísse em diretórios ou remeter links simbólicos.ls -ld "$name" | cut -d" " -f1
Mas, novamente, você não deve analisar
ls
. Este método falha se qualquer um dos nomes de arquivo contiver novas linhas.