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 gotglob
está 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.zsh
retorna 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
.