o comando ls no Linux é usado para listar o conteúdo de qualquer diretório.
por padrão, ele Lista todo o conteúdo, seja um arquivo ou um diretório ou um link ou um pipe nomeado.
mas e se você quiser listar apenas os diretórios? Como estás?
como qualquer coisa no Linux, existem várias maneiras de realizar a mesma tarefa. Listar apenas os diretórios não é diferente:
- ls-d */
- ls-l | grep ‘^d’
- encontrar . -maxdepth 1-type d
- echo * /
- tree-D-L 1
não te preocupes. Vou explicar as coisas em detalhes. Aqui está o conteúdo do diretório vou usar nos exemplos aqui:
Usar o comando ls para listar os diretórios apenas
é sempre bom fazê-lo com o familiar comando ls, porque este é o comando que você usar para exibir o conteúdo de um diretório.
para listar apenas os subdiretórios, use a opção -d
com o comando ls como este:
ls -d */
aqui está a saída que mostra:
Documents]$ ls -d */another_dir/ my_dir/
por que */
? Porque sem ele, ls -d
retornará apenas o nome do diretório. Os diretórios da lista de opções -d
não são seu conteúdo (que inclui arquivos, diretórios etc.).
o */
é um padrão. Com *
, você lista todo o conteúdo (incluindo o conteúdo dos subdiretórios) e o /
restringe o padrão aos diretórios.
esta imagem mostra a diferença muito bem.
Você pode combiná-lo com a listagem longa opção -l
e mais outras opções:
Documents]$ ls -ld */drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir/drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir/
Se você não quiser que a barra (/) no final dos nomes de diretório, você pode usar o comando recortar cortá-lo fora:
Documents]$ ls -ld */ | cut -f1 -d'/'drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dirdrwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Apenas para a lista de subdiretórios em um diretório específico
O comando acima funciona no diretório atual. E se você não estiver no mesmo diretório?
nesta situação, você pode usar */
no final do Caminho do Diretório com ls -d
:
ls -d Path/To/Dir/*/
Aqui está um exemplo onde eu mover para fora do diretório de Documentos e, em seguida, listar somente os diretórios dentro do diretório de Documentos:
~]$ ls -ld Documents/*/drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 Documents/another_dir/drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 Documents/my_dir/
você notou que ele não lista o diretório oculto? Essa é uma lacuna desse método. Você pode usar ls -d .*/
para exibir diretórios ocultos, mas ele exibe apenas diretórios ocultos.
use a combinação de comando ls e grep
você sempre pode confiar no bom e velho comando grep para filtrar a saída para conteúdo específico.
se você listar o conteúdo por muito tempo, poderá identificar os diretórios porque comece com d
.
Você pode usar o grep para filtrar o conteúdo que começam com d:
ls -l | grep '^d'
Mas isso dá a você muito mais campos do que apenas os nomes de diretório:
Documents]$ ls -l | grep '^d'drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dirdrwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Use o comando localizar uma lista de diretórios
veja como usar o comando localizar para listar apenas os subdiretórios:
find directory_path -maxdepth 1 -type d
eu espero que você esteja familiarizado com o comando localizar. Vou explicar, no entanto.
com type d
, você pede ao comando find para procurar apenas diretórios.
com maxdepth 1
você pede ao comando find para manter a pesquisa apenas no nível atual (e não entrar nos subdiretórios).
Documents]$ find . -maxdepth 1 -type d../my_dir./another_dir./.my_hidden_dir
Como você pode ver na saída acima, ele também mostra o diretório oculto.
use o comando tree para listar apenas diretórios
se o seu objetivo é listar apenas os diretórios, Você também pode usar o comando tree.
por padrão, o comando tree fornece a estrutura de diretório completa. Você pode modificá-lo para mostrar apenas diretórios e apenas no nível atual.
tree -dai -L 1
- d – procurar somente pastas
- um – olhar para os arquivos e diretórios ocultos, bem como
- i – remover a estrutura de árvore do display
- L 1 – não vá para os subdiretórios
Aqui está a saída:
Documents]$ tree -dai -L 1.another_dirmy_dir.my_hidden_dir3 directories
Usando o comando echo para listagem de diretórios
O candidato improvável? Você ficará surpreso ao saber que o comando echo no Linux também pode ser usado para exibir o conteúdo de um diretório. Tente usar echo *
e veja por si mesmo.
semelhante ao comando ls, você também pode usar o padrão */
para listar apenas os diretórios no diretório de trabalho atual.
echo */
Aqui está a saída, que é idêntico ao que você tem com o ls -d
comando:
Não poderia ser mais maneiras para listar somente os diretórios, e não os arquivos. Na verdade, os métodos discutidos aqui podem ter alguns ifs e buts com base no que você está procurando.
se o seu objetivo é apenas exibir os diretórios, a maioria dos comandos que discuti funcionaria. Se você quiser algo mais específico, como apenas obter o nome dos diretórios com barra etc, você terá que fazer alguma formatação por conta própria.
espero que você ache essa dica do Linux útil. Perguntas e sugestões são sempre bem-vindas.