Linux / Comando tree: listar a estrutura de diretórios
tree mostra arquivos e diretórios em uma árvore que torna visíveis as relações entre as pastas. Use -L para limitar a profundidade, -a para incluir nomes ocultos e -I para excluir padrões da apresentação. O comando básico consulta a estrutura sem modificar os arquivos.
Os exemplos usam o tree para Unix/Linux e sintaxe do Bash; o comando homônimo do Windows tem opções diferentes. Instale a ferramenta antes dos exercícios e use uma pasta de teste. Caminhos como /etc/nginx, /var/www, ~/projects/app, src, tests e Project Files são exemplos: substitua-os por diretórios existentes e acessíveis. Para uma listagem sem árvore, consulte o guia de ls.
O que é o comando tree?
tree percorre recursivamente o diretório indicado e representa o nível de cada entrada pela indentação. Sem um caminho, consulta a pasta atual, representada por .. O exemplo abaixo cria uma pasta temporária exclusiva com três subdiretórios e cinco arquivos vazios; exige Bash e as ferramentas mktemp, mkdir, touch e tree. Os parênteses preservam o diretório do shell chamador.
(
demo_dir=$(mktemp -d "${TMPDIR:-/tmp}/tree-demo.XXXXXX") || exit 1
cd -- "$demo_dir" || exit 1
mkdir -- config public src || exit 1
touch -- README.md config/app.conf public/index.html src/main.py src/utils.py || exit 1
printf 'Pasta de teste: %s\n' "$demo_dir"
tree
)
Depois da linha que informa o caminho temporário, a árvore tem a forma abaixo. A ordem depende das regras de ordenação da localidade e os caracteres dos ramos dependem do terminal. A pasta criada permanece disponível; para reutilizá-la nos demais exemplos, entre no caminho exibido com cd -- "caminho exibido", substituindo o campo pelo caminho real. Os arquivos são vazios: o exercício demonstra a estrutura, sem executar uma aplicação.
.
├── README.md
├── config
│ └── app.conf
├── public
│ └── index.html
└── src
├── main.py
└── utils.py
3 directories, 5 files
ls é prático para inspecionar uma pasta e seus metadados; tree facilita perceber quais entradas estão dentro de outras ao longo de vários níveis. A última linha do exemplo informa três diretórios e cinco arquivos, sem contar a raiz . como um subdiretório.
Instalar tree
tree é um programa externo e pode não vir instalado. Verifique a versão com a linha abaixo e escolha somente o gerenciador correspondente à sua distribuição; os comandos de instalação exigem autorização administrativa. Confira opções disponíveis com tree --help.
tree --version
Debian e Ubuntu
sudo apt update
sudo apt install tree
Rocky Linux, AlmaLinux, RHEL e Fedora
sudo dnf install tree
O pacote precisa estar disponível nos repositórios habilitados para a versão da distribuição. Em sistemas antigos que usam yum, o comando equivalente é sudo yum install tree. Se o pacote não for encontrado, confira a versão e os repositórios oficiais antes de acrescentar fontes de software.
Arch Linux
sudo pacman -S tree
Sintaxe e uso básico
tree [opções] [diretório ...]
A linha acima é uma sinopse: os colchetes indicam partes opcionais e não devem ser digitados. As linhas abaixo são chamadas alternativas, não uma sequência de mudanças de diretório. Sem argumentos, a consulta usa a pasta atual; a última linha consulta dois diretórios na mesma execução.
tree
tree /etc/nginx
tree ~/projects/app
tree src tests
Caminhos com espaços devem ser colocados entre aspas para que sejam passados como um único argumento.
tree "Project Files"
O relatório final informa contagens da listagem, não um inventário incondicional de tudo que existe no disco. Filtros, limites e erros de leitura mudam o que foi consultado; o manual também registra limitações das contagens com algumas opções de filtragem. --noreport omite essa linha.
tree --noreport
Escolher o diretório e a profundidade
Consultar uma pasta específica
Você pode especificar o diretório para verificar como um argumento sem mudar a localização atual.
tree /var/www
tree ./src
Especificar o caminho separa a localização de execução do comando e o destino da saída, tornando mais fácil entender a intenção mesmo em automação.
Limitar a profundidade com -L
Para grandes projetos ou diretórios de sistema, gerar tudo pode resultar em uma saída excessivamente longa. Especifique a profundidade máxima a exibir após -L.
tree -L 1
tree -L 2 /var/www
tree -L 3 ~/projects/app
tree -L 1 mostra os itens imediatamente abaixo da raiz escolhida. tree -L 2 permite mais um nível: na estrutura de teste, os arquivos de src, config e public aparecem nesse segundo nível. Limite primeiro o alcance necessário para compartilhar uma estrutura legível.
Incluir arquivos ocultos e listar somente diretórios
Incluir arquivos ocultos com -a
Por padrão, nomes iniciados por ponto ficam ocultos. -a inclui entradas como .env e .gitignore, se existirem, além das entradas normais. Não significa mostrar apenas arquivos ocultos. As entradas especiais . e .. não são enumeradas como filhos.
tree -a
tree -a -L 2
Ao compartilhar nomes de arquivos de configuração ou estruturas de diretórios externamente, certifique-se de que nenhuma informação sensível seja exposta. -a exibe os nomes, não o conteúdo, mas os próprios nomes podem ser sensíveis.
Exibir apenas diretórios com -d
Para verificar apenas a estrutura de pastas excluindo arquivos, use -d.
tree -d
tree -d -L 3 /var/www
-d ajuda a explicar a organização de módulos ou de pastas de backup. Para incluir diretórios ocultos nessa visão, combine-o com -a.
Incluir ou excluir por nome de arquivo
É seguro colocar os padrões de -P e -I entre aspas simples para que o shell não os expanda primeiro. Vários padrões podem ser separados pela barra vertical |.
Exibir apenas arquivos correspondentes com -P
-P seleciona arquivos pelo padrão de nome, mantendo os diretórios necessários à navegação. Não é uma expressão regular. Na pasta de teste, *.py seleciona main.py e utils.py; diretórios sem correspondências podem continuar aparecendo.
tree -P '*.py'
tree -P '*.jpg|*.png|*.webp'
Acrescente --prune para remover da apresentação os diretórios que ficaram vazios após a filtragem. No exemplo, isso concentra a árvore no ramo src.
tree -P '*.py' --prune
Para incluir arquivos ocultos na verificação de padrões, você também precisa de -a.
Excluir entradas com -I
-I exclui da apresentação arquivos e diretórios correspondentes ao padrão. Ocultar diretórios de dependência, resultados de compilação e cache torna a estrutura do projeto muito mais simples.
tree -I 'node_modules|.git|dist|__pycache__'
tree -L 3 -I '*.log|tmp|cache'
-I exclui arquivos apenas da exibição, sem apagá-los.
Usar regras de .gitignore
Quando disponível, --gitignore usa regras dos arquivos .gitignore e procura regras nos diretórios ancestrais; ao encontrar a pasta .git, também pode considerar .git/info/exclude. Isso não equivale a consultar a lista de arquivos rastreados pelo Git nem garante reproduzir todas as configurações de exclusão do Git. O manual da ferramenta define o alcance dessas regras.
tree --gitignore
tree -a --gitignore -L 3
Verifique se a versão instalada suporta esta opção com tree --help. Mesmo ao usar --gitignore, você deve revisar a saída manualmente antes de compartilhar a estrutura do repositório externamente.
Mostrar tamanhos, permissões e datas
Tamanhos individuais e acumulados
-s mostra o tamanho lógico de cada entrada em bytes. -h pede uma apresentação legível com sufixos como K e M, usando potências de 1024; não precisa ser combinado com -s. Para uma pasta sem --du, o tamanho da própria entrada não corresponde à soma do conteúdo.
tree -s
tree -h
--du acumula os tamanhos das entradas visitadas em cada diretório e implica -s. Combine com -h para facilitar a leitura. Os limites, os filtros, o tratamento de links e as permissões afetam o alcance da consulta; não interprete esse número como o total de blocos físicos ocupados no disco. Para investigar uso de armazenamento, veja também o guia de du.
tree --du -h -L 2
Com --du, a árvore considerada precisa ser reunida antes da apresentação. Isso pode aumentar o tempo e a memória consumidos. -L 2 limita o alcance do exemplo; não transforma automaticamente o resultado em uma medição completa de todas as pastas mais profundas.
Permissões, proprietário e modificação
-p mostra tipo e permissões, -u mostra o proprietário e -g mostra o grupo, com identificadores numéricos quando os nomes não puderem ser resolvidos. -D, sem uma opção que selecione outra data, mostra a última modificação. Na árvore de teste, -pugD -L 2 reúne esses dados para as entradas exibidas.
tree -p
tree -pug
tree -pugD -L 2
Ao investigar problemas de permissão, você pode ver tanto a estrutura quanto os metadados, mas se houver nomes de usuário e caminhos muito longos, a largura da saída pode se tornar grande.
Ordenar e mostrar caminhos
Agrupar diretórios antes dos arquivos
--dirsfirst põe diretórios antes dos demais itens. -t ordena por modificação e --sort=size por tamanho; -r inverte a ordenação selecionada. As três linhas são alternativas, e cada uma mostra uma forma de organizar os resultados.
tree --dirsfirst
tree -t
tree --sort=size -r
-U desativa a ordenação e usa a ordem fornecida pelo diretório, que não deve ser tratada como uma sequência estável. Nessa modalidade, opções como --dirsfirst e a inversão de ordem ficam desativadas.
Mostrar prefixos e remover a indentação
-f acrescenta o prefixo do caminho consultado a cada entrada; um ponto de partida relativo pode continuar produzindo caminhos relativos. Para exigir caminhos absolutos, forneça uma raiz absoluta. -i remove a indentação e os traços dos ramos.
tree -f
tree -fi --noreport
-fi --noreport serve para uma lista visual mais simples, mas não é uma interface segura para qualquer nome de arquivo. Caracteres especiais podem ser escapados e links podem incluir -> com o destino. Não divida essa saída por espaços ou linhas para executar ações sobre arquivos arbitrários; escolha uma ferramenta com separadores inequívocos para essa automação.
Salvar relatórios em texto, JSON e XML
Salvar como arquivo de texto
-o grava a listagem no arquivo indicado e pode sobrescrever um arquivo existente. Escolha um nome novo e um local gravável. Se o arquivo de saída estiver dentro da pasta consultada, ele pode entrar na própria listagem; para um relatório separado, use um caminho fora da árvore e ajuste o argumento de -o. As duas linhas abaixo são alternativas de relatório.
tree -L 3 -o directory-structure.txt
tree -a -I '.git|node_modules' --noreport -o project-tree.txt
O redirecionamento > do shell também cria ou trunca o arquivo antes de executar o programa: uma falha do tree não preserva automaticamente o conteúdo anterior. Não reutilize o mesmo nome se quiser conservar o relatório gerado com -o. -n desativa cores; uma opção explícita -C pode ter precedência, portanto confira aliases ou opções acrescentadas pela sua configuração.
tree -n -L 3 > directory-structure.txt
Gerar JSON e XML
-J gera uma representação em JavaScript Object Notation (JSON), e -X gera Extensible Markup Language (XML). As linhas abaixo salvam relatórios distintos, substituindo arquivos de mesmo nome se existirem. Use uma pasta gravável e destinos que não precisem ser preservados.
tree -J -L 3 > directory-structure.json
tree -X -L 3 > directory-structure.xml
Leia os arquivos para conferir o resultado e o status da execução antes de usá-los em outro programa. A estrutura e os campos variam entre versões; o formato JSON é um array que pode conter a raiz e informações de relatório. Um arquivo sintaticamente válido não prova que todos os diretórios puderam ser lidos. Evite supor uma estrutura fixa sem conferir a versão instalada.
Links simbólicos e sistemas de arquivos
Escolher se links devem ser seguidos
Por padrão, links simbólicos exibem o nome do link e o caminho de destino, mas não entram nos diretórios para os quais apontam. Usar -l segue links simbólicos que apontam para diretórios.
tree -l -L 3
Seguir links pode explorar mais caminhos do que o esperado, por isso é mais seguro usar um limite de profundidade junto. A ferramenta evita links recursivos detectados, mas você precisa verificar o alcance da saída e o tempo de processamento por conta própria.
Limitar o sistema de arquivos com -x
-x impede a movimentação para um sistema de arquivos diferente do diretório inicial. Isso é útil para limitar o alcance da exploração em servidores com muitos pontos de montagem.
tree -x -L 3 /
O exemplo consulta / com alcance limitado; para uma inspeção menor, substitua a raiz pelo caminho necessário. -x compara o sistema de arquivos e não promete bloquear qualquer ponto de montagem ou confinar a ferramenta. Diretórios sem permissão continuam incompletos, e uma árvore da raiz pode gerar muita saída.
Combinações úteis
| Comando | Propósito |
|---|---|
tree |
Exibe os arquivos e subdiretórios do diretório atual como uma árvore. |
tree -L 2 |
Exibe apenas até dois níveis a partir da localização atual. |
tree -a |
Inclui também arquivos ocultos e diretórios ocultos. |
tree -d |
Exibe apenas diretórios, excluindo arquivos. |
tree -I 'node_modules|.git' |
Exclui arquivos e diretórios que correspondem ao padrão especificado. |
tree -P '*.py' --prune |
Concentra a apresentação nos ramos com arquivos Python. |
tree -h --du -L 2 |
Mostra tamanhos acumulados no alcance consultado, limitado a dois níveis. |
tree -pugD |
Exibe permissões, usuário, grupo e hora de modificação juntos. |
tree -fi --noreport |
Lista entradas com o prefixo do caminho, sem ramos nem relatório final. |
tree -J -L 3 |
Exibe a estrutura até três níveis como JSON. |
Resumo das principais opções
| Opção | Descrição |
|---|---|
-a |
Inclui arquivos e diretórios ocultos que começam com um ponto. |
-d |
Exibe apenas diretórios. |
-L número |
Limita a profundidade máxima de diretórios a ser exibida. |
-P padrão |
Seleciona arquivos que correspondem ao padrão curinga. |
-I padrão |
Exclui arquivos e diretórios que correspondem ao padrão curinga. |
--prune |
Remove diretórios vazios da saída após aplicar os filtros. |
--gitignore |
Filtra com regras de arquivos .gitignore e outras fontes documentadas pela ferramenta. |
-f |
Mostra o prefixo do caminho consultado, que pode ser relativo. |
-h |
Mostra tamanhos de arquivos em unidades legíveis por humanos. |
--du |
Calcula tamanhos cumulativos por diretório. |
-p |
Exibe tipos de arquivos e permissões. |
-D |
Mostra a hora da última modificação. |
--dirsfirst |
Ordena diretórios antes de arquivos. |
-J |
Produz a saída em formato JSON. |
-X |
Produz a saída em formato XML. |
-o arquivo |
Salva a saída no arquivo especificado. |
-l |
Segue links simbólicos que apontam para diretórios. |
-x |
Pesquisa apenas dentro do mesmo sistema de arquivos do local de início. |
--noreport |
Omitir o resumo do número de arquivos e diretórios no final. |
Cuidados com diretórios grandes
Limitar profundidade e filtros
Se você pesquisar o diretório raiz, toda a pasta pessoal do usuário ou grandes diretórios de dependências sem restrições, a saída e o tempo de processamento aumentarão significativamente. Primeiro, limite a profundidade com -L e exclua ramos desnecessários com -I ou --gitignore.
Considerar o custo de --du e --prune
--du e --prune acumulam a árvore considerada antes de exibi-la. Isso pode atrasar o início da saída e elevar o consumo de memória. Se o relatório demorar, restrinja o diretório inicial e exclua ramos desnecessários; para interromper uma execução interativa, use Ctrl+C. Uma saída interrompida é parcial e não deve ser usada como relatório completo.
Conferir permissões e nomes sensíveis
Diretórios para os quais o usuário atual não tem permissões de leitura ou navegação não serão totalmente exibidos. Simplesmente executar como administrador para ver toda a estrutura pode expandir o acesso desnecessariamente, portanto, primeiro verifique os caminhos e permissões necessários.
Antes de anexar arquivos de saída a documentos ou relatos de problemas, revise para garantir que nomes de usuários, caminhos de servidores internos, nomes de arquivos secretos e codinomes de projetos não estejam incluídos.
Perguntas frequentes
Por que aparece tree: command not found?
A mensagem normalmente indica que o programa não foi encontrado em PATH. Confira a instalação e a resolução com type -a tree, instale o pacote pelo gerenciador adequado e verifique tree --version. No Windows, o comando homônimo não oferece a mesma interface do programa para Unix/Linux.
Como posso visualizar subdiretórios em até apenas dois níveis?
Use tree -L 2. Para outro diretório, execute tree -L 2 /caminho/real, substituindo o exemplo por uma pasta existente. A raiz é o ponto de partida; os seus filhos são o primeiro nível.
Posso excluir os diretórios node_modules e .git de uma vez?
Use tree -I 'node_modules|.git'. Colocar o padrão entre aspas simples impede que o shell interprete a barra vertical ou caracteres curinga primeiro.
Como posso formatar a saída da árvore de forma agradável para um README?
Limite o alcance com tree -L 3 -I '.git|node_modules|dist' --noreport. Confira nomes internos antes de compartilhar e coloque o resultado em um bloco de código para preservar o alinhamento. O comando consulta a pasta atual; acrescente o caminho do projeto se necessário.




