Como mostrar apenas diretórios ocultos e, em seguida, localizar arquivos ocultos separadamente

3

Estou tentando listar todos os arquivos ocultos em um diretório, mas não em outros diretórios, e estou tentando fazer isso usando apenas ls e grep.

ls -a | egrep  "^\."

Isso é o que eu tenho até agora, mas o problema é que ele também lista diretórios ocultos, quando eu não quero isso.

Então, completamente separadamente, quero listar os diretórios ocultos.

    
por Rikg09 29.12.2015 / 16:09

4 respostas

5

Para listar apenas arquivos ocultos :

ls -ap | grep -v / | egrep "^\."  

Note que arquivos aqui é tudo o que não é um diretório. Não é arquivo em "tudo no Linux é um arquivo" ;)

Para listar apenas diretórios ocultos :

ls -ap | egrep "^\..*/$"  

Comentários:

  • ls -ap lista tudo no diretório atual, incluindo oculto e coloca um / no final dos diretórios.
  • grep -v / inverte os resultados de grep / , para que nenhum diretório seja incluído.
  • "^\..*/$" corresponde a tudo que começa com . e termina em / .
  • Se você quiser excluir os diretórios . e .. dos resultados da segunda parte, use a opção -A em vez de -a para ls ou, se desejar trabalhar com regex, você pode usar "^\.[^.]+/$" em vez de "^\..*/$" .

Divirta-se!

    
por 29.12.2015 / 16:32
2

Para listar os arquivos e diretórios ocultos no diretório atual, inclusive. e ..:

echo .*

Para listar os arquivos e diretórios ocultos no diretório atual e em seus subdiretórios recursivamente:

find . -name '.*'

Se você quiser salvar os resultados em um arquivo, use um redirecionamento:

find . -name '.*' >output-file.txt
    
por 29.12.2015 / 16:31
1

Mude para zsh (se ainda não o fez) e execute

ls .*(^/)

A parte entre parênteses é chamada de modificadores glob e significa selecionar tudo, menos os diretórios.

Se você está interessado apenas em arquivos simples, então não queira excluir apenas diretórios, mas também outros arquivos especiais (named pipes etc) e tente

ls .*(.)
    
por 29.12.2015 / 16:32
0

Experimente este comando:

find -maxdepth 1 -type f -name '.*' | sed 's/^..//'

Isto irá encontrar apenas arquivos (-type f) no diretório atual (-maxdepth 1), começando com um '.', o comando sed se livra de './' em todas as linhas.

    
por 29.12.2015 / 16:28