Maybe i'm getting old but should . and .. not be ignored by any command ? AFAIK these are there because of the filesystem and serve no other purpose.
Isso não faria sentido, simplesmente porque você especificamente forneceu os nomes .
e ..
para o seu chown <...> .*
. Nesse caso, por que chown
acha que você não fez o que queria fazer?
Os nomes foram alimentados para chown porque o shell os expandiu com base nos critérios de expansão de globalização de concha que você forneceu, que correspondiam a .
e ..
junto com todos os outros diretórios de pontos no diretório atual. Como você disse a chown
para trabalhar recursivamente, ele desceu para esses diretórios e para qualquer coisa abaixo deles. Isso significa que "desceu para" ..
e continuou trabalhando a partir daí.
Você mesmo pode tentar isso fazendo echo .*
para ver os nomes que foram inseridos na linha de comando do chown. Compare isso com a saída de echo *
com shopt dotglob
ativado e desativado, respectivamente ( shopt -s dotglob
para ativar, shopt -u dotglob
para desativar). Use ls
em vez de echo
para ver o primeiro nível de recursão.
Existem razões perfeitamente válidas para executar até chown -R
em .
ou ..
. O mais óbvio parece ser extrair um arquivo que possua informações de propriedade incorretas em arquivos e todos os arquivos em um único diretório; Nesse caso, chown -R abc:xyz .
de dentro do diretório descompactado é uma coisa perfeitamente razoável, para redefinir a propriedade para algo razoável em seu sistema.
Se você quiser que seu shell não expanda .*
em .
e ..
, será necessário verificar se ele está configurado corretamente para o seu shell específico. Por exemplo, citando a página man do GNU bash 4.2.37 (1) -release (atual no Debian Wheezy no momento em que este texto foi escrito, Debian bash
versão do pacote 4.2+dfsg-0.1+deb7u3
na arquitetura amd64):
GLOBIGNORE
A colon-separated list of patterns defining the set of file names to be ignored by pathname expansion. If a filename matched by a pathname expansion pattern also matches one of the patterns in GLOBIGNORE, it is removed from the list of matches.
Lembre-se de que parte da filosofia Unix é "confiar que o usuário sabe o que está fazendo".