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.

Documentação oficial