O caractere . só é excluído da correspondência de curinga quando é o primeiro caractere do nome do arquivo e seria correspondido por um curinga. No padrão .* , o * corresponde cadeias começando com . , portanto .* inclui .. (bem como . , com * correspondendo à cadeia vazia). Esta é uma consequência direta das regras de correspondência de padrões, por mais irritantes que possam ser.
Faz sentido abrir uma exceção e excluir sistematicamente . e .. das correspondências, mas não foi assim que foi feito historicamente, portanto, muitos shells Bourne / POSIX ( sh , dash , bash , AT & T ksh , yash …) inclui-os, assim como (t) csh e até mesmo peixe 1.x. Alguns shells excluem . e .. de todas as correspondências com curingas: zsh, pdksh / posh / mksh (diferente de AT & T ksh), fish ≥2.0 .
Se você definir GLOBIGNORE para qualquer valor não vazio, bash alternará para o comportamento conveniente, mas não padrão, de excluir . e .. das correspondências. A configuração GLOBIGNORE também desativa o comportamento de excluir arquivos de ponto; com GLOBIGNORE='.*' , você obtém o comportamento normal de ./* , excluindo os arquivos de pontos, mas ./.* corresponde apenas aos arquivos de ponto e não . ou .. . Defina GLOBIGNORE=.:.. (ou GLOBIGNORE=. ) para que ./* correspondam a todos os arquivos, incluindo arquivos de ponto, mas excluindo . e .. .
Em ksh93, defina FIGNORE='@(.|..)' para excluir . e .. das correspondências, mas inclua arquivos de ponto. Assim, .* expandirá para arquivos de pontos, mas não incluirá . ou .. .
Sem recorrer a funcionalidades específicas da shell, pode combinar ficheiros dot com as duas globs seguintes:
.[!.]* ..?*
e todos os arquivos (excluindo . e .. ) com os seguintes três globs:
..?* .[!.]* *
Mas você precisa tomar cuidado porque um ou vários globs podem não corresponder a nenhum arquivo, o que faria com que o padrão correspondente permanecesse não expandido.
Para evitar surpresas, pode ser mais fácil usar find . find nunca recorre ao diretório pai (a menos que seja instruído a seguir links simbólicos).
find /home/username/. -name . -o -prune -name '.*' -exec chown -R username:groupname {} +