Existe alguma maneira de listar apenas as pastas em um diretório usando comandos bash? (como o ls
comando lista todos os arquivos e pastas)
linux
command-line
ls
SpiXel
fonte
fonte
ls -d -- */
els -d */
?--
é convencionalmente usado para marcar o final das opções, de modo que, se um arquivo for nomeado,-l
ls não o interpretará como a opção de formato de listagem longa.A resposta de Stephen Martin deu um aviso e listou a pasta atual também, então eu sugiro
(Isso é no Linux; não foi possível encontrar -maxdepth e -mindepth na página do manual POSIX para localizar)
fonte
ls -d -- */
opção, poisfind
também encontrará diretórios ocultos. O que às vezes pode ser útil, mas também às vezes causa problemas. Espero que este comentário possa ajudar outras pessoas. 1Irá listar apenas pastas. E como Teddy apontou, você precisará de -maxdepth para impedir que se recuse em subdiretórios
fonte
-maxdepth 1
também quer .A resposta de Daniel está correta. Aqui estão algumas adições úteis, no entanto.
Para evitar listar pastas ocultas (como
.git
), tente o seguinte:E para substituir a barra de pontos temida no início da
find
saída em alguns ambientes, use o seguinte:fonte
Você "não deveria" analisar a saída de ls, ou é o que se diz. O raciocínio subjacente é que a saída se destina a ser legível por humanos e que pode tornar desnecessariamente complicado analisar, se bem me lembro.
se você não quiser ls ou find, tente filtrar "*" com "[-d]".
Fiz exatamente isso, por algum motivo, ls e o achado não estavam funcionando (acho que nomes de arquivos com espaços e colchetes ou qualquer outra coisa que eu estava ignorando), então fiz algo ao longo das linhas de
fonte
Apenas para enfatizar uma coisa que me confundiu aqui, no que diz respeito à seleção de padrões globais; diga que você tem isso:
Então, diga aqui que você deseja selecionar apenas
mydir*
diretórios. Observe que, se você deixar de fora a barra final,ls -d
listará os arquivos também:... no entanto, com uma barra final, apenas os diretórios são listados:
fonte
printf "%s\n" */
listará todos os diretórios no $ PWD.echo */
também funcionará, mas em uma longa linha, mais difícil quando os nomes tiverem espaços.fonte
Você também pode usar:
Ou:
fonte