Resposta
Você só precisa para criar uma lista de arquivos globais correspondentes, separados por espaço:
for file in .* *; do echo "$file"; done
Editar
O acima pode reescrever de forma diferente usando a expansão de chaves
for file in {.*,*}; do echo "$file"; done
ou ainda menor : for file in {.,}*; do echo "$file"; done
Adicionando o caminho para os arquivos selecionados:
for file in /path/{..?,.[!.],}*; do echo "$file"; done
Adicionando o caminho para os selecionados arquivos:
for file in /path/{.,}*; do echo "$file"; done
Se você quiser ser sofisticado e remover da lista, geralmente desnecessário . e
basta alterar {.,}* para {..?,.[!.],}*.
Para completar, vale a pena para mencionar que também se pode definir dotglob para combinar arquivos de ponto com * puro.
shopt -s dotglob
Em zsh, é necessário definir adicionalmente nullglob para evitar o erro em caso de não correspondência:
setopt nullglob
ou, alternativamente, adicione o qualificador glob N ao padrão:
for file in /path/{.,}*(N); do echo "$file"; done
for file in dir/.* dir/*; do.*corresponde a.e..(exceto em zsh).*permanece*se não houver nenhum arquivo correspondente.shopt -s gotglobestá apenas no bash.zsh: no matches found: .*quando executo o (s) comando (s) nesta resposta . Por que isso aconteceria? ls no diretório mostra os arquivos.zshretorna erro se algum padrão não partidas. Para evitar a execuçãosetopt nullglob, que desativará esse recurso globalmente, ou adicionará o qualificador(N)após a estrela global, ou seja:for file in /path/{.,}*(N); do echo "$file"; done.