Linux / Comando / tree: ver y filtrar la estructura de directorios
tree es un comando que muestra la estructura jerárquica de directorios y archivos en forma de árbol con sangría. Es útil para revisar todo el directorio actual, limitar la profundidad de la salida y seleccionar archivos específicos para verificar la estructura del proyecto.
Se explica cómo usarlo frecuentemente en la práctica, desde la instalación básica hasta mostrar archivos ocultos, excluir patrones, verificar el tamaño y permisos de archivos, y guardar en texto o JSON. Los ejemplos se basan en tree para Unix/Linux.
¿Qué es el comando tree?
tree recorre la ruta indicada y representa sus archivos y subdirectorios con sangría. Sin un operando de directorio, utiliza el directorio actual, representado por ..
tree
Por ejemplo, se puede ver de un vistazo una estructura como la siguiente.
.
├── README.md
├── config
│ └── app.conf
├── public
│ └── index.html
└── src
├── main.py
└── utils.py
3 directories, 5 files
ls también muestra listas de archivos, pero está diseñado principalmente para comprobar los elementos de un solo directorio. tree es más conveniente para entender visualmente las relaciones de inclusión de varios niveles.
Instalando tree
tree no es un comando incorporado de shell y puede no estar instalado de forma predeterminada según la distribución. Primero, compruebe si está instalado con el siguiente comando.
tree --version
Debian y Ubuntu
sudo apt update
sudo apt install tree
Rocky Linux, AlmaLinux, RHEL y Fedora
sudo dnf install tree
En las distribuciones antiguas, si se usa yum en lugar de dnf, se puede usar sudo yum install tree. El paquete debe estar en un repositorio activado para poder instalarse.
Arch Linux
sudo pacman -S tree
Sintaxis y uso básico
tree [OPCIONES] [DIRECTORIO ...]
Para mostrar el directorio actual, ejecútelo sin argumentos, y para verificar otra ubicación, especifique la ruta. También se pueden especificar varios directorios a la vez.
tree
tree /etc/nginx
tree ~/projects/app
tree src tests
Las rutas con espacios se colocan entre comillas para pasarlas como un solo argumento.
tree "Project Files"
Al final de la salida se muestra de manera predeterminada el número de directorios y archivos explorados. Si no necesita este resumen, use --noreport.
tree --noreport
Especificar el directorio de destino y la profundidad de salida
Ver la estructura de un directorio específico
Puede especificar el directorio que desea verificar como un argumento sin cambiar la ubicación actual.
tree /var/www
tree ./src
Al especificar la ruta, se separan la ubicación de ejecución del comando y el destino de salida, lo que facilita comprender la intención incluso en la automatización.
-L para limitar la profundidad máxima
En proyectos grandes o directorios del sistema, si se muestra todo, los resultados pueden ser demasiado largos. Especifique la profundidad máxima que se mostrará después de -L.
tree -L 1
tree -L 2 /var/www
tree -L 3 ~/projects/app
tree -L 2 solo muestra hasta dos niveles desde el punto de inicio. Al compartir la estructura del directorio, es mejor limitar primero la profundidad para mostrar solo el rango necesario.
Mostrar archivos ocultos o solo directorios
-a para incluir archivos ocultos
La salida predeterminada no incluye archivos y directorios ocultos cuyo nombre comienza con un punto. Al usar -a, también se muestran elementos como .env, .gitignore.
tree -a
tree -a -L 2
Al compartir el nombre del archivo de configuración o la estructura del directorio con otros, asegúrese de que no se exponga información confidencial. -a imprime el nombre en lugar del contenido del archivo, pero el propio nombre también puede ser sensible.
Ver solo directorios con -d
Para ver solo la estructura de las carpetas sin los archivos, use -d.
tree -d
tree -d -L 3 /var/www
Es útil para describir rápidamente la composición de los módulos de un proyecto o la disposición de los directorios de respaldo.
Incluir o excluir mediante el nombre de archivo
Para los patrones -P y -I, es seguro encerrarlos entre comillas simples para que la shell no los expanda primero. Varios patrones se pueden separar con la barra vertical |.
Mostrar solo archivos coincidentes con -P
-P selecciona solo los archivos que coinciden con el patrón comodín.
tree -P '*.py'
tree -P '*.jpg|*.png|*.webp'
Para eliminar incluso los directorios que parecen vacíos después del filtrado, use --prune junto con ello.
tree -P '*.py' --prune
Para incluir archivos ocultos en la inspección del patrón, se requiere -a adicionalmente.
Excluir elementos innecesarios con -I
-I excluye los archivos y directorios que coinciden con el patrón de la salida. Ocultando directorios de dependencias, resultados de compilación y caché, la estructura del proyecto se vuelve mucho más sencilla.
tree -I 'node_modules|.git|dist|__pycache__'
tree -L 3 -I '*.log|tmp|cache'
-I no elimina archivos, solo los excluye de la visualización.
Usar reglas de exclusión de Git con --gitignore
En las versiones soportadas, puede usar --gitignore para aprovechar .gitignore y las reglas de los archivos excluidos de Git en el filtro.
tree --gitignore
tree -a --gitignore -L 3
Para verificar si la versión instalada soporta esta opción, consulte tree --help. Incluso al usar --gitignore, debe revisar el contenido de la salida antes de compartir la estructura del repositorio externamente.
Mostrar tamaño, permisos y hora de modificación
Ver el tamaño de archivos y el tamaño acumulado del directorio
-s muestra el tamaño en bytes, y si se usa junto con -h, muestra el tamaño en unidades legibles.
tree -s
tree -h
--du calcula acumulativamente el tamaño de los archivos y subdirectorios incluidos en cada directorio. Si desea unidades legibles, use -h junto con él.
tree --du -h -L 2
--du necesita reunir información del árbol antes de emitir la salida, lo que puede consumir tiempo y memoria. No interprete un resultado con filtros o límites como una medición completa del uso del disco: el alcance inspeccionado y los tamaños lógicos pueden diferir de los bloques asignados que informa una herramienta como du.
Ver permisos, propietario y hora
-p muestra los permisos, -u muestra el propietario, -g muestra el grupo. Si se agrega -D, también puede verificar la hora de la última modificación.
tree -p
tree -pug
tree -pugD -L 2
Al investigar problemas de permisos, puede ver la estructura y los metadatos juntos, pero si hay nombres de usuario y rutas muy largos, el ancho de la salida puede aumentar.
Cambiar el orden de clasificación y la visualización de la ruta
Mostrar y ordenar primero los directorios
--dirsfirst coloca los directorios antes que los archivos. -t ordena por hora de modificación, --sort=size por tamaño, y -r invierte el orden de los resultados.
tree --dirsfirst
tree -t
tree --sort=size -r
Para usar el orden almacenado en el sistema de archivos y reducir el costo de clasificación, puede usar -U. En este caso, --dirsfirst se desactiva.
Crear ruta completa y lista concisa
-f antepone la ruta a cada nombre, pero una raíz relativa produce prefijos relativos; no garantiza rutas absolutas. -i elimina las líneas de ramificación y la sangría.
tree -f
tree -fi --noreport
Si necesita una lista de rutas simples para leer en otros comandos, la combinación -fi --noreport es conveniente. Sin embargo, si los nombres de archivo contienen caracteres especiales como saltos de línea, el análisis de texto simple puede no ser seguro.
Guardar los resultados en archivos y en formato estructurado
Guardar como archivo de texto
-o escribe en el archivo indicado; la redirección > también puede sobrescribir un archivo existente. Trabaje en una carpeta propia, use un nombre nuevo y, si quiere evitar que el informe aparezca dentro del árbol que inspecciona, guárdelo fuera de esa raíz.
tree -L 3 -o directory-structure.txt
tree -a -I '.git|node_modules' --noreport -o project-tree.txt
También se puede usar la redirección de shell. Para evitar que los caracteres de control de color se mezclen en el archivo, se puede desactivar el color con -n.
tree -n -L 3 > directory-structure.txt
Salida en JSON y XML
-J produce JSON (JavaScript Object Notation) y -X produce XML (Extensible Markup Language). Son formatos estructurados que facilitan el tratamiento por programas, pero debe comprobar los campos y el esquema que genera su versión.
tree -J -L 3 > directory-structure.json
tree -X -L 3 > directory-structure.xml
Dado que el formato de salida estructurada y los campos proporcionados pueden variar según la versión de tree instalada, consulte primero la salida real al crear un programa consumidor.
Manejo de enlaces simbólicos y límites del sistema de archivos
Decidir si se seguirá un enlace simbólico
Básicamente, los enlaces simbólicos muestran el nombre del enlace y la ruta de destino, pero no ingresan al directorio al que apunta el enlace. Al usar -l, se sigue el enlace simbólico que apunta al directorio.
tree -l -L 3
Seguir un enlace puede explorar más rutas de lo esperado, por lo que es seguro usar también un límite de profundidad. La herramienta evita los enlaces recursivos detectados, pero debe comprobar directamente el alcance de la salida y el tiempo de procesamiento.
Explorar solo dentro del sistema de archivos actual con -x
-x evita pasar a un sistema de archivos diferente al directorio de inicio. Es útil cuando se limita el alcance de exploración en servidores con muchos puntos de montaje.
tree -x -L 3 /
Incluso si se apunta al directorio raíz, no se pueden leer las rutas sin permisos, y si se imprime toda la estructura del sistema, los resultados pueden ser muy grandes.
Combinaciones de comandos tree que se usan con frecuencia
| Comando | Propósito |
|---|---|
tree |
Muestra los archivos y subdirectorios del directorio actual en forma de árbol. |
tree -L 2 |
Muestra solo hasta dos niveles desde la ubicación actual. |
tree -a |
Incluye archivos ocultos y directorios ocultos. |
tree -d |
Muestra solo directorios, excluyendo archivos. |
tree -I 'node_modules|.git' |
Excluye archivos y directorios que coincidan con el patrón especificado. |
tree -P '*.py' --prune |
Muestra centrado en las ramas que contienen archivos de Python. |
tree -h --du -L 2 |
Muestra el tamaño acumulado de los directorios hasta dos niveles en unidades fáciles de leer. |
tree -pugD |
Muestra junto con permisos, usuario, grupo y tiempo de modificación. |
tree -fi --noreport |
Genera una lista de rutas completas sin líneas de ramas ni resumen. |
tree -J -L 3 |
Exporta la estructura hasta tres niveles en formato JSON. |
Resumen de opciones principales
| Opciones | Descripción |
|---|---|
-a |
Incluye archivos y directorios ocultos que comienzan con un punto. |
-d |
Muestra solo los directorios. |
-L NÚMERO |
Limite la profundidad máxima de directorios a mostrar. |
-P PATRÓN |
Selecciona archivos que coincidan con un patrón de comodín. |
-I PATRÓN |
Excluye archivos y directorios que coincidan con un patrón de comodín. |
--prune |
Elimina de la salida los directorios vacíos después de aplicar el filtro. |
--gitignore |
Usa las reglas de los archivos de exclusión de Git para el filtrado. |
-f |
Muestra el prefijo de la ruta completa antes de cada nombre de archivo. |
-h |
Muestra el tamaño del archivo en unidades fáciles de leer. |
--du |
Calcula el tamaño acumulado por directorio. |
-p |
Muestra el tipo de archivo y los permisos. |
-D |
Muestra la última hora de modificación. |
--dirsfirst |
Ordena los directorios antes que los archivos. |
-J |
Salida en formato JSON. |
-X |
Salida en formato XML. |
-o ARCHIVO |
Guarda la salida en el archivo especificado. |
-l |
Sigue los enlaces simbólicos que apuntan a directorios. |
-x |
Solo explore dentro del mismo sistema de archivos que la ubicación inicial. |
--noreport |
Omitir el resumen final del número de archivos y directorios. |
Puntos a tener en cuenta al usar en directorios grandes
Limitar primero la profundidad y el filtro
Explorar sin restricciones el directorio raíz, todo el hogar del usuario o directorios de dependencias grandes aumentará significativamente el tiempo de salida y procesamiento. Primero limite la profundidad con -L y excluya ramas innecesarias con -I o --gitignore.
Comprender el costo de procesamiento de --du y --prune
--du y --prune pueden necesitar reunir todo el árbol en memoria antes de producir resultados. En directorios muy grandes, esto puede retrasar el inicio de la salida y aumentar el uso de memoria.
Comprobar errores de permisos y nombres sensibles
Los directorios a los que el usuario actual no tiene permisos de lectura o navegación no se mostrarán completamente. Simplemente ejecutar con privilegios de administrador para ver toda la estructura puede ampliar innecesariamente el alcance de acceso, por lo que primero debe verificar las rutas y permisos necesarios.
Antes de adjuntar el archivo de salida a documentos o incidencias, debe revisar que no incluya nombres de usuario, rutas internas de servidor, nombres de archivos confidenciales ni códigos de proyecto.
FAQ
¿Por qué aparece el error tree: command not found?
Es porque tree no está instalado o la ruta del ejecutable no se encuentra en PATH. Instale el paquete tree con el gestor de paquetes de la distribución que utiliza y luego verifíquelo con tree --version.
¿Cómo puedo ver solo hasta dos niveles de subdirectorios?
Utilice tree -L 2. Para verificar otras rutas, indique el directorio al final como tree -L 2 /RUTA/A/REVISAR.
¿Se pueden excluir los directorios node_modules y .git al mismo tiempo?
Utilice tree -I 'node_modules|.git'. Si encierra el patrón entre comillas simples, puede evitar que el shell interprete primero las barras verticales o los comodines.
¿Cómo puedo hacer que los resultados de tree sean aptos para ponerlos en el README?
Limite la profundidad y los elementos a excluir como tree -L 3 -I '.git|node_modules|dist' --noreport. Después de comprobar de que los resultados no contengan rutas internas ni nombres de archivos sensibles, inclúyalos en un bloque de código para mantener la estructura.
Compare otras utilidades en Lista de comandos de uso frecuente en Linux, Manual upstream de tree y Repositorio oficial de código fuente de tree.
Consulte la disponibilidad de paquetes en Información del paquete tree de Debian, Información del paquete tree de Fedora y Información del paquete tree de Arch Linux.




