tree
Визуальное дерево директорий и файлов с отступами
Описание
tree — утилита для рекурсивного отображения структуры директорий в виде дерева с
отступами и символами псевдографики. В отличие от ls -R, вывод tree
визуально передаёт вложенность: каждый уровень отступает, ветки соединяются символами
├──, └──, │. Утилита разработана Стивом Бейкером и
распространяется как свободное ПО.
На большинстве дистрибутивов tree не входит в базовую поставку и устанавливается отдельно:
apt install tree (Debian/Ubuntu), dnf install tree (Fedora/RHEL),
brew install tree (macOS). Утилита поддерживает вывод в форматах JSON и XML — это
делает её полезной не только для визуализации, но и для обработки структуры в скриптах.
Основные сценарии применения: быстрый обзор структуры нового проекта, документирование файловой
иерархии в README, отладка вложенности при работе с файловыми операциями, проверка результатов
скриптов, которые создают дерево файлов. В документации по проектам часто можно увидеть вывод
именно команды tree.
Синтаксис
Компоненты команды:
- tree — сама команда.
- [ОПЦИИ] — флаги для фильтрации, форматирования и ограничения глубины.
- [ДИРЕКТОРИЯ] — директория (или несколько) для отображения. По умолчанию — текущая директория (
.).
Флаги и опции
| Флаг | Описание |
|---|---|
-L N |
Ограничить глубину рекурсии N уровнями (depth limit) |
-a |
Показывать скрытые файлы (начинающиеся с .) |
-d |
Показывать только директории, без файлов |
-f |
Показывать полные пути к файлам (full path prefix) |
-I PATTERN |
Исключить файлы/директории, соответствующие glob-паттерну (можно повторять) |
-P PATTERN |
Показывать только файлы/директории, соответствующие паттерну |
-h |
Человекочитаемые размеры файлов (K, M, G) — используется с -s |
-s |
Показывать размер каждого файла |
-D |
Показывать дату последнего изменения файла |
-p |
Показывать права доступа (permissions) в формате drwxr-xr-x |
-u |
Показывать имя владельца файла (user) |
--dirsfirst |
Сначала выводить директории, затем файлы на каждом уровне |
-J |
Вывод в формате JSON (удобно для обработки в скриптах) |
-X |
Вывод в формате XML |
-o FILE |
Записать вывод в файл (вместо stdout) |
--gitignore |
Читать .gitignore и исключать указанные там файлы (tree 2.0+) |
--noreport |
Не выводить строку итога «N directories, M files» в конце |
--charset X |
Использовать указанную кодировку для символов дерева (например ASCII) |
Паттерны использования
Быстрый обзор структуры проекта
Посмотреть 2 уровня вложенности — не слишком много, но полная картина.
tree -L 2 # . # ├── docs/ # │ ├── api.md # │ └── setup.md # ├── src/ # │ ├── app.py # │ └── models/ # └── tests/ # 3 directories, 3 files
Только директории (скелет проекта)
Удобно при документировании архитектуры.
tree -d -L 3 # . # ├── docs # ├── src # │ ├── api # │ ├── models # │ └── utils # └── tests # └── fixtures
Исключить служебные директории
Убрать node_modules, .git, __pycache__ из вывода.
tree -I "node_modules|.git|__pycache__|*.pyc" tree -I "node_modules" -I ".git" -I "*.egg-info" # Или использовать .gitignore: tree --gitignore
Документирование в README
Вставить структуру проекта прямо в README.md.
# Сгенерировать и скопировать: tree -L 2 --dirsfirst -I ".git" # Или записать в файл: tree -L 3 -o docs/structure.txt # Для README (ASCII-совместимый): tree --charset ASCII -L 2
Найти файлы по паттерну
Показать только файлы определённого типа во всём дереве.
tree -P "*.py" # только .py файлы tree -P "*.html" -L 4 # html на глубине до 4 tree -P "test_*" # файлы начиная с test_ # Вместе с размерами: tree -P "*.log" -sh
Вывод в JSON для обработки
Структура дерева в формате, удобном для парсинга.
tree -J -L 2 | python3 -m json.tool # Или сохранить: tree -J -L 3 -o structure.json # Подсчитать количество файлов по типу: tree -J | python3 -c " import json, sys data = json.load(sys.stdin) # ... обработка ..."
Советы и предупреждения
На большинстве серверных дистрибутивов
tree отсутствует. Быстрая замена через
встроенные инструменты: find . -type f | sort или ls -R. Для установки:
sudo apt install tree / sudo yum install tree.
Если
tree недоступна, псевдодерево можно получить через:
find . | sed -e 's/[^/]*\// /g' -e 's/ \([^/]\)/└─ \1/'
Или использовать exa --tree (современная замена ls с поддержкой дерева).
Вызов
tree / или tree в большом проекте с node_modules
без ограничения глубины -L выведет миллионы строк и может зависнуть терминал.
Всегда используйте -L N при работе с незнакомыми директориями или большими проектами.
На старых системах (Ubuntu 20.04 и раньше) установлена tree 1.8, где
--gitignore
отсутствует. Проверьте версию: tree --version. При необходимости обновите через
snap install tree или соберите из исходников.