Ei, isso é muito bacana, eu sempre usei para nós ls -al | grep '^d'- isso é muito mais sucinto.
paxdiablo
43
por que usar * / ?? Por favor explique!?
precisa saber é o seguinte
6
Não tenho uma explicação adequada, porém sei que isso */força a exibição de apenas itens que terminam com uma barra, que nesse caso seria um diretório, mesmo que a -Fopção de lsnão seja usada. Semelhante ao comportamento de ls *phpe como ele exibe todos os arquivos que terminam com phpem um diretório.
David Hancock
3
@ user975234 Alguém fez uma pergunta semelhante, e há uma explicação muito boa no link
Para mim, isso parece ser o que deve ser feito. Diferentemente das lssoluções sugeridas , findé o único responsável por fazer o trabalho (sem depender da expansão de curinga do shell, que pode impor limites). Também é muito mais conciso.
Peterp
1
O ruim disso é que não funcionará se você estiver tentando fazer um loop pelos resultados e seus resultados tiverem espaços nos nomes.
Ubiquibacon
2
Alternativamente, se você não quiser incluir o diretório em si: find * -maxdepth 0 -type d.
James Ko
@ubiquibacon use finds' -print0ou -execopção.
1
Isso é muito lento, pelo menos no meu Mac. Parece para fazer a pesquisa completa recursiva que findnormalmente faz, mas apenas a saída das pastas em profundidade 1.
Kara Brightwell
22
Os seguintes
find *-maxdepth 0-type d
basicamente filtra a expansão de '*', ou seja, todas as entradas no diretório atual, pela -type dcondição
A vantagem é que a saída é a mesma ls -1 *, mas apenas com diretórios e entradas não começam com um ponto
E obrigado por explicar as opções. Stack Overflow é sobre respostas, eu sempre aprecio quando as pessoas gostam de você com uma explicação vs. "apenas leia a entrada do homem!" <- isso não é uma resposta.
fusion27
Para começar da linha 2 (pule a linha com apenas um ponto):tree -d -L 1 -i --noreport | tail -n +2
adius
Esta é a solução com a classificação mais alta que lista diretórios vinculados por software e o faz de maneira útil, expondo-os como um link. Eu prefiro a variação:tree -C -d -L 1 -i --noreport | tail -n+2
Amnon Harel
9
ls -l | grep '^d'
Você pode criar um alias e colocá-lo no arquivo de perfil
os links não são visualizados com este comando. E um link pode ser um arquivo ou um diretório. Exemplo: lrwxrwxrwx 1 raiz raiz 21 de abril 15 17:38 cron -> / lib / init / upstart-job.
C-toesca
7
find .-maxdepth 1-type d -name [^\.]\* | sed 's:^\./::'
Para listar os diretórios no diretório de trabalho atual,
ls -d */pode ser usado. E se você precisar listar os diretórios ocultos, use este comando
ls -d .*/
ls -d <caminho do diretório personalizado> | sed -e "s / \ /// g" não está funcionando ..ou pistas?
Dhwanit
Obrigado! Eu só queria a lista de diretórios sem todas as permissões e isso fez o truque. :)
codingjeremy
5
find specifiedpath -type d
Se você não quiser recursar em subdiretórios, faça o seguinte:
find specifiedpath -type d -mindepth 1 -maxdepth 1
Observe que os diretórios "ponto" (cujo nome começa com .) também serão listados; mas não os diretórios especiais .nem ... Se você não quiser diretórios "pontilhados", você pode grep:
listará todos os diretórios, incluindo diretórios ocultos, em formato longo.
Recentemente, mudei para zsh (MacOS Catalina) e descobri que:
ls -ld */.*/
não funcionará mais se o diretório atual não contiver diretórios ocultos.
zsh: no matches found:.*/
Ele imprimirá o erro acima, mas também falhará ao imprimir os diretórios.
ls -ld *(/).*(/)
Também falha da mesma maneira.
Até agora eu descobri que isso:
ls -ld */;ls -ld .*/
é uma solução decente. O ;é um separador de comandos. Mas isso significa que, se não houver diretórios ocultos, ele listará os diretórios e ainda imprimirá o erro para nenhum diretório oculto:
foo
bar
zsh: no matches found:.*/
lsé o comando shell para o conteúdo da lista do diretório atual; -lé o sinalizador para especificar que você deseja listar em Longford (um item por linha + várias outras informações interessantes) -dé o sinalizador para listar todos os diretórios "como arquivos" e não */é recursivamente o argumento 'listar todos os arquivos que terminam em uma barra' *é um simples comando regex para "qualquer coisa", assim */como solicitar ao shell que liste "qualquer coisa que termine em '/'"
Veja man lspara mais informações.
Eu coloquei isso:
alias lad="ls -ld */;ls -ld .*/"
no meu .zshrc, e parece funcionar bem.
NOTA: Também descobri que
ls -ld .*/ 2> /dev/null
não funciona, pois ainda imprime sterr no terminal. Atualizarei minha resposta se / quando encontrar uma solução.
Isso pode incluir arquivos, se houver algum nome de arquivo drw, e excluiria todos os diretórios que não sejam legíveis pelo proprietário e graváveis. grep ^dfunciona melhor.
Respostas:
Tente isso
ls -d */
para listar diretórios no diretório atualfonte
ls -al | grep '^d'
- isso é muito mais sucinto.*/
força a exibição de apenas itens que terminam com uma barra, que nesse caso seria um diretório, mesmo que a-F
opção dels
não seja usada. Semelhante ao comportamento dels *php
e como ele exibe todos os arquivos que terminam comphp
em um diretório.echo */
fará o mesmo tambémTente o seguinte:
fonte
ls
soluções sugeridas ,find
é o único responsável por fazer o trabalho (sem depender da expansão de curinga do shell, que pode impor limites). Também é muito mais conciso.find * -maxdepth 0 -type d
.find
s'-print0
ou-exec
opção.find
normalmente faz, mas apenas a saída das pastas em profundidade 1.Os seguintes
basicamente filtra a expansão de '*', ou seja, todas as entradas no diretório atual, pela
-type d
condiçãoA vantagem é que a saída é a mesma
ls -1 *
, mas apenas com diretórios e entradas não começam com um pontofonte
Você pode usar
ls -d */
outree -d
Outra solução seria globbing, mas isso depende do shell que você está usando e se o globbing para diretórios é suportado.
Por exemplo ZSH:
fonte
tree
?tree
não é instalado por padrão (embora esteja nos repositórios).tree
comando não é um comando unix nativo (por favor, corrija-me se estiver errado).Como existem dezenas de maneiras de fazer isso, aqui está outra:
fonte
tree -d -L 1 -i --noreport | tail -n +2
tree -C -d -L 1 -i --noreport | tail -n+2
Você pode criar um alias e colocá-lo no arquivo de perfil
fonte
fonte
Para listar os diretórios no diretório de trabalho atual,
ls -d */
pode ser usado. E se você precisar listar os diretórios ocultos, use este comandols -d .*/
fonte
use isso para obter uma lista de diretórios
fonte
find specifiedpath -type d
Se você não quiser recursar em subdiretórios, faça o seguinte:
find specifiedpath -type d -mindepth 1 -maxdepth 1
Observe que os diretórios "ponto" (cujo nome começa com
.
) também serão listados; mas não os diretórios especiais.
nem..
. Se você não quiser diretórios "pontilhados", você podegrep
:find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
fonte
mindepth
como se livrar.
! 😁A resposta vai depender do seu shell .
Por
zsh
exemplo, você pode fazer o seguinte:E todos os diretórios no diretório de trabalho atual serão exibidos.
Veja
man zshexpn
para mais informações.Uma abordagem alternativa seria usar
find(1)
, que deve funcionar na maioria dos tipos de Unix:find(1)
tem muitos usos, então eu definitivamente recomendoman find
.fonte
Você pode usar o
tree
comando com suad
opção para fazer isso.veja
man tree
para mais informações.fonte
tree
. Oh, bem, não era minha intenção roubar o trovão de alguém.Se eu tiver este diretório:
ls -l
Para obter todos os diretórios, use -L para resolver os links:
ls -lL | grep '^d'
Sem -L:
ls -l | grep '^d'
O diretório conf_nagios está ausente.
fonte
fonte
Isso tem funcionado para mim:
(Mas, estou mudando para
echo */
como mencionado por @nos)fonte
Aqui está outra solução que mostra diretórios vinculados. Eu prefiro um pouco porque é um subconjunto da saída ls -l "normal":
fonte
Na festança:
Listará todos os diretórios
listará todos os diretórios em formato longo
listará todos os diretórios, incluindo diretórios ocultos, em formato longo.
Recentemente, mudei para zsh (MacOS Catalina) e descobri que:
não funcionará mais se o diretório atual não contiver diretórios ocultos.
Ele imprimirá o erro acima, mas também falhará ao imprimir os diretórios.
Também falha da mesma maneira.
Até agora eu descobri que isso:
é uma solução decente. O
;
é um separador de comandos. Mas isso significa que, se não houver diretórios ocultos, ele listará os diretórios e ainda imprimirá o erro para nenhum diretório oculto:ls
é o comando shell para o conteúdo da lista do diretório atual;-l
é o sinalizador para especificar que você deseja listar em Longford (um item por linha + várias outras informações interessantes)-d
é o sinalizador para listar todos os diretórios "como arquivos" e não*/
é recursivamente o argumento 'listar todos os arquivos que terminam em uma barra'*
é um simples comando regex para "qualquer coisa", assim*/
como solicitar ao shell que liste "qualquer coisa que termine em '/'"Veja
man ls
para mais informações.Eu coloquei isso:
alias lad="ls -ld */;ls -ld .*/"
no meu .zshrc, e parece funcionar bem.
NOTA: Também descobri que
ls -ld .*/ 2> /dev/null
não funciona, pois ainda imprime sterr no terminal. Atualizarei minha resposta se / quando encontrar uma solução.
fonte
du -d1
é talvez a opção mais curta. (Desde que você não precise canalizar a entrada para outro comando.)fonte
Para listar apenas diretórios em um caminho especificado, basta digitar ls -l | grep drw
fonte
drw
, e excluiria todos os diretórios que não sejam legíveis pelo proprietário e graváveis.grep ^d
funciona melhor.Listagem longa de diretórios
Listando diretórios
- ls -d * /
fonte