Existe alguma opção com o comando 'ls' que eu vejo apenas os diretórios?


74

Às vezes, preciso verificar apenas os diretórios e não os arquivos. Existe alguma opção com o comando ls? Ou existe alguma utilidade para fazer isso?

Edição : Estou usando o Mac OS X, e ls -dme dá .mesmo que eu tenha diretórios.


4
Alguém pode explicar por que ls -ddá apenas .e por que */deve ser adicionado ao final para que funcione?
Cwd

3
@cwd Se você não especificar nenhum arquivo, o lspadrão será .. E -dsignifica não imprimir o conteúdo do diretório, imprimir o próprio diretório.
Mikel

11
O @cwd tenta usá- ls -plo, mostra os /nomes dos diretórios após. Portanto, */é apenas um padrão que corresponde ao nome do diretório e à /combinação.
Pitt

Eu criei uma função implementando a resposta de Steven_D para o meu arquivo ~ / .bash_aliases: gist.github.com/rjurney/998f4951a57bfa5daeb9a6c18f6f4827
rjurney

Respostas:


84

Sei que já existe uma resposta selecionada, mas você pode obter o comportamento solicitado com apenas ls:

ls -ld -- */

(Observe que o '-' marca o final dos parâmetros, impedindo que os nomes de pastas que começam com um hífen sejam interpretados como outras opções de comando.)

Isso listará todos os diretórios não ocultos (a menos que você configure os globs do seu shell para expandi-los) no diretório de trabalho atual em que é executado (observe que ele também inclui links simbólicos para os diretórios). Para obter todos os subdiretórios de outra pasta, tente:

ls -ld /path/to/directory/*/

Observe que o -l é opcional.


5
Agradável. Eu nunca considerei que os diretórios tenham implícito /no final - mas agora que vejo você responder, faz sentido. Afinal, o preenchimento de guias sempre o adiciona.
gvkv

-d for dir, -l for long format. qual é o propósito --?
Dineshkumar

11
Embora isso pareça curto e funcione na maioria dos casos, talvez você não queira usar essa abordagem quando um diretório verdadeiro for necessário, não o link simbólico de um diretório. Então, findna verdade, é uma boa escolha nesse caso.
Biocibernico

11
findtambém tem a vantagem quando o número de diretórios excede o tamanho máximo do argumento.
Steven D

Trabalhando para trás, eu só percebi que você pode simplesmente ignorar qualquer coisa com uma extensão: ls -alhF --ignore=*.*. Não tenho certeza como isso iria lidar com pastas 'ocultas', ou seja.myHiddenFolder
Timmah

14

Não, mas um findcomando simples fará isso:

find . -type d -depth 1

ou grep

ls -F | grep /

Você pode, então, aliasar um deles, se necessário.


6
No Ubuntu 14.04 foi -maxdepth 1. Também findme queria virar a ordem:find . -maxdepth 1 -type d
Brad Cupit

Essa ls -F | grep /solução faz maravilhas! Parece ser o único que posso trabalhar na minha máquina FreeBSD. Eu acho que usar Fish significa que qualquer coisa com */pode não funcionar?
Cjm 27/07/16

Eu nunca trabalhei com Fish, então não tenho certeza disso, mas a opção -F pode fazer maravilhas.
gvkv

7

Eu gosto do utilitário em árvore para obter uma visão geral da estrutura de diretórios. Está disponível no MacPorts e em todas as distribuições Linux que eu tentei.

tree -d -L 2

Isso mostraria todos os diretórios, com dois níveis de profundidade.


6

Eu também precisava visualizar diretórios ocultos, então modifiquei a sugestão acima para atender às minhas necessidades

ls -d -- */ .*/

(dependendo do shell, isso também pode incluir .e ..)


2

Com zsh(como encontrado por padrão no macOS, ele ainda estava /bin/shlá), você usaria qualificadores glob para selecionar arquivos com base em seu tipo:

  • Listar diretórios não ocultos:

    ls -d -- *(/)
    
  • Listar todos os diretórios:

    ls -d -- *(D/)
    

    ( .e ..sempre são excluídos, adicione-os individualmente, se desejar)

  • Inclua também links simbólicos para diretórios:

    ls -d -- *(D-/)
    

    ( -faz com que outros qualificadores sejam aplicados após a resolução do link simbólico).


-1

Eu acho que ls tem um bug no Mac OS X. Uma solução alternativa é usar grep ... ls -l / | grep "^d"


11
É bom saber que não sou a única pessoa que usa o grep "^d"hack
Michael Mrozek

6
Até onde eu sei, o comportamento que ele descreve não é um bug e é o mesmo se alguém estiver usando o GNU ls. A opção -d exibe a listagem do diretório e não o conteúdo. Para ver por que isso pode ser útil, veja a diferença entre: ls -l /homeels -dl /home
Steven D

Quilates não são especiais para a concha. Você pode apenas usar ls -l / | grep ^d. Se você estiver indo para usar aspas, já que você não precisa de expansão de parâmetros, fazê-los únicos aspas. ls -l / | grep '^d'. Sim, sou pedante. Mas realmente faça isso. :)
Caractere curinga

-1
$ ls -p | grep /

O -psinalizador fará lsadicionar uma barra (`/ ') após cada nome de arquivo, se esse arquivo for um diretório.


-2

A maneira mais fácil é digitar o seguinte comando. Isso funciona na maioria das plataformas e versões UNIX e Linux. Você pode pular o -Fque desejar, mas é o argumento que adiciona o / ao final do nome do diretório. O -Cargumento captura apenas nomes de diretório - todos eles no diretório atual. Se você deseja ver apenas diretórios e subdiretórios no caminho atual, basta adicionar o -Rargumento ( ls -CFR).

# ls -CF
/dir1  /dir2  /dir3  /beaches  /Work  /Other 

11
Em todas as lsimplementações que conheço e, na especificação POSIX de ls, -Cé produzido em colunas , não pular arquivos não pertencentes ao diretório. No seu exemplo, eles /são impressos antes dos nomes dos arquivos, o que nenhuma lsimplementação faria. With -F, /é anexado ao nome do arquivo dos arquivos de diretório.
Stéphane Chazelas

Quando vi essa resposta, me perguntei: “Onde isso é verdade?” @ StéphaneChazelas e Jeff Schaller - você não descarta respostas flagrantemente erradas?
G-Man

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.