文章列表
7 分钟阅读

Tree 命令教程:快速查看和导出目录结构


系列:Linux 命令基础

第 2 / 16 篇

  1. Tmux 入门教程:让 SSH 断线和多任务终端不再中断
  2. Tree 命令教程:快速查看和导出目录结构
  3. Linux 搜索命令教程:find、grep、locate、rg 应该怎么选
  4. Linux 压缩与解压命令教程:tar、zip、gzip、xz、zstd 一次讲清
  5. Linux 文本处理命令教程:cat、less、head、tail、wc、sort、uniq
  6. Linux 权限命令教程:chmod、chown、umask
  7. Linux 进程查看与管理:ps、top、htop、kill、jobs
  8. Linux 网络排查命令:ss、curl、dig、ping、traceroute
  9. systemctl 与 journalctl 入门:管理服务和查看日志
  10. rsync 使用指南:服务器文件同步与备份
  11. Linux 服务器安全基础:SSH、用户权限、防火墙和 fail2ban
  12. 线上问题排查流程:日志、端口、进程、磁盘、网络怎么一步步看
  13. 深入浅出:Linux 树状目录神器 tree 命令的安装与使用指南
  14. Linux 系统 Vim 编辑器终极指南:从入门到精通
  15. SSH 隧道实战:本地转发、远程转发和动态转发
  16. SSH Config 使用指南:别名、跳板机与多服务器管理

背景

在 Linux 服务器、开发项目或本地文件整理过程中,经常需要快速回答这些问题:

  • 一个项目有哪些目录和关键文件?
  • 某个目录下面的文件层级是否正确?
  • 如何把项目结构贴到 README、需求文档或发给 AI 编程工具?
  • 怎样排除 node_modules.git、构建产物等无关目录?

只使用 ls 虽然能查看当前目录内容,但不方便观察完整层级。tree 是一个用于以树状结构展示目录和文件的命令行工具,特别适合项目初始化检查、服务器排障、生成目录说明和提交代码前的结构核对。

如果你还需要在目录中定位文件或内容,可以继续看 Linux 搜索命令教程:find、grep、locate、rg 应该怎么选;如果要把目录打包备份,可以参考 Linux 压缩与解压命令教程:tar、zip、gzip、xz、zstd 一次讲清

本文以 Debian / Ubuntu 为例,介绍 tree 的安装、常用参数、实用组合和常见问题。

步骤

1. 安装 tree

Debian / Ubuntu 可以使用 apt 安装:

Terminal window
sudo apt update
sudo apt install -y tree

安装后进入一个目录测试:

Terminal window
tree

输出会类似:

.
├── README.md
├── backend
│ ├── app
│ ├── pyproject.toml
│ └── tests
├── docker-compose.yml
└── frontend
├── package.json
└── src
6 directories, 4 files

其他常见系统的安装方式:

Terminal window
# Fedora / Rocky Linux / AlmaLinux
sudo dnf install -y tree
# CentOS 7
sudo yum install -y tree
# macOS(已安装 Homebrew)
brew install tree

Windows 用户可以在 WSL 中安装并使用:

Terminal window
sudo apt update
sudo apt install -y tree

2. 查看指定目录的结构

直接查看当前目录:

Terminal window
tree

查看指定目录:

Terminal window
tree /path/to/project

例如查看当前项目的 backend 目录:

Terminal window
tree backend

如果目录路径包含空格,使用引号包起来:

Terminal window
tree "/home/username/My Projects/demo-app"

3. 限制显示层级

大型项目直接执行 tree 往往会输出大量内容。最常用的参数是 -L,用于限制目录深度。

只显示当前目录下一层:

Terminal window
tree -L 1

显示两层:

Terminal window
tree -L 2

查看一个 Web 项目时,推荐先使用:

Terminal window
tree -L 2

效果类似:

.
├── backend
│ ├── app
│ ├── pyproject.toml
│ └── tests
├── frontend
│ ├── package.json
│ └── src
├── docker-compose.yml
└── README.md

这可以在不被大量文件淹没的情况下,快速判断项目的整体结构。

4. 只显示目录

有时只关心目录划分,不想看到每一个文件。可以使用 -d

Terminal window
tree -d

结合层级限制:

Terminal window
tree -d -L 3

例如,一个 FastAPI + Flutter 项目可以快速查看为:

.
├── backend
│ ├── app
│ │ ├── api
│ │ ├── core
│ │ ├── models
│ │ └── services
│ └── tests
├── docs
├── frontend
│ ├── lib
│ ├── test
│ └── web
└── infra

对于检查模块划分、准备架构文档或向 AI 描述项目结构,这种输出最清晰。

5. 显示隐藏文件

默认情况下,tree 不会显示以 . 开头的隐藏文件或隐藏目录,例如:

.git
.env
.github
.vscode

使用 -a 可以显示全部内容:

Terminal window
tree -a

例如:

Terminal window
tree -a -L 2

常用于检查:

  • .gitignore 是否存在;
  • .env.env.example 是否放在正确位置;
  • GitHub Actions 配置是否位于 .github/workflows
  • VS Code 项目配置是否存在。

注意:不要在公开文章、截图或提交到仓库的文档中直接暴露 .env 文件内容。tree 只会显示文件名,但文件名本身也可能暴露部署结构。

6. 忽略无关目录和文件

前端项目中的 node_modules、Python 项目中的 .venv、Git 目录中的 .git,通常会让输出变得非常大。

使用 -I 可以忽略匹配的文件或目录:

Terminal window
tree -I 'node_modules|.git|.venv'

推荐的项目结构查看命令:

Terminal window
tree -L 3 -I 'node_modules|.git|.venv|__pycache__|dist|build'

参数说明:

-L 3:最多显示三层目录
-I :忽略符合规则的名称
| :表示“或”,可以同时排除多个目录或文件

对于 Python 项目:

Terminal window
tree -L 3 -I '.git|.venv|__pycache__|.pytest_cache|*.pyc'

对于 Node.js / React / Vue 项目:

Terminal window
tree -L 3 -I '.git|node_modules|dist|build|.next|coverage'

对于 Flutter 项目:

Terminal window
tree -L 3 -I '.git|.dart_tool|build|.idea|.vscode'

7. 只显示匹配的文件类型

使用 -P 可以只显示匹配规则的文件或目录。

只显示 Python 文件:

Terminal window
tree -P '*.py'

只显示 Markdown 文件:

Terminal window
tree -P '*.md'

只显示 Docker 相关文件:

Terminal window
tree -P 'Dockerfile|docker-compose*.yml'

结合目录深度使用:

Terminal window
tree -L 3 -P '*.py'

如果希望连同包含这些文件的目录一起展示,可以增加 --prune

Terminal window
tree -L 4 -P '*.py' --prune

这在检查 FastAPI、Django 或脚本项目的 Python 代码分布时很有用。

8. 显示文件大小和修改时间

查看文件大小:

Terminal window
tree -h

查看人类可读的文件大小和修改时间:

Terminal window
tree -h -D

输出示例:

[Jun 21 12:00] README.md
[Jun 21 12:10] docker-compose.yml
[Jun 21 12:20] backend

排序方式也可以调整:

Terminal window
# 按修改时间排序
tree -t
# 按文件大小排序
tree -s
# 将目录排在文件前面
tree --dirsfirst

一个实用组合:

Terminal window
tree -L 2 -h -D --dirsfirst

适合快速查看某个部署目录中哪些内容最近被修改过。

9. 将目录结构导出到文件

tree 最实用的场景之一,是把项目结构导出为文本文件,放进 README、开发文档或交给 AI 工具分析。

导出当前目录:

Terminal window
tree -L 3 -I 'node_modules|.git|.venv|__pycache__' > project-tree.txt

查看导出内容:

Terminal window
cat project-tree.txt

如果希望追加到已有文件,而不是覆盖:

Terminal window
tree -L 3 >> project-tree.txt

导出到 Markdown 文档时,建议使用代码块包裹:

Terminal window
{
echo '```text'
tree -L 3 -I 'node_modules|.git|.venv|__pycache__'
echo '```'
} > project-structure.md

生成的 project-structure.md 可以直接放到项目文档中。

10. 生成 HTML 格式目录树

tree 还可以生成 HTML 文件,便于通过浏览器查看或作为静态文档保存。

Terminal window
tree -H . -L 3 -o project-tree.html

参数含义:

-H .:设置 HTML 输出中的基础路径
-L 3:限制显示深度
-o :指定输出文件

生成后可以在本地浏览器中打开:

Terminal window
xdg-open project-tree.html

在 macOS 上可以使用:

Terminal window
open project-tree.html

对于不方便直接打开桌面浏览器的服务器,可以把文件下载到本地后查看。

11. 常用命令速查

日常使用中,下面几条命令已经足够覆盖大多数场景:

Terminal window
# 查看当前目录
tree
# 只看两层结构
tree -L 2
# 只显示目录
tree -d -L 3
# 显示隐藏文件
tree -a -L 2
# 忽略依赖、缓存和 Git 目录
tree -L 3 -I 'node_modules|.git|.venv|__pycache__|dist|build'
# 查看 Python 文件结构
tree -L 4 -P '*.py' --prune
# 导出项目结构
tree -L 3 -I 'node_modules|.git|.venv|__pycache__' > project-tree.txt
# 显示文件大小、日期,并让目录排在前面
tree -L 2 -h -D --dirsfirst

12. 为项目设置一个快捷命令

如果经常在项目目录中查看结构,可以在 ~/.bashrc~/.zshrc 中加入别名。

编辑 Bash 配置:

Terminal window
nano ~/.bashrc

加入:

Terminal window
alias ptree="tree -L 3 -I 'node_modules|.git|.venv|__pycache__|dist|build|.dart_tool'"

重新加载配置:

Terminal window
source ~/.bashrc

之后进入项目目录后,只需要执行:

Terminal window
ptree

即可快速得到一个适合开发场景的目录结构。

常见问题

1. 执行 tree 提示 command not found 怎么办?

这通常表示系统还没有安装 tree

Debian / Ubuntu:

Terminal window
sudo apt update
sudo apt install -y tree

安装完成后重新执行:

Terminal window
tree -V

如果仍然无法使用,检查命令路径:

Terminal window
which tree

2. 为什么执行 tree 后终端卡住或输出特别多?

通常是因为项目中存在大量依赖目录,例如:

node_modules
.venv
.git
dist
build

先按:

Ctrl-c

停止输出,然后改用限制层级和忽略目录的方式:

Terminal window
tree -L 3 -I 'node_modules|.git|.venv|__pycache__|dist|build'

不要直接对大型项目、用户主目录或系统根目录执行无限层级的 tree

3. 为什么 tree -I 没有忽略目录?

确认忽略规则使用了单引号,并使用 | 分隔多个名称:

Terminal window
tree -I 'node_modules|.git|.venv'

错误示例:

Terminal window
tree -I node_modules .git .venv

上面的写法会被 Shell 视为多个独立参数,不能正确表达忽略规则。

4. 如何避免把敏感文件名写进公开文档?

输出项目目录结构前,可以排除常见敏感文件:

Terminal window
tree -L 3 -a -I '.git|.env|.env.*|node_modules|.venv|__pycache__'

如果项目中有私有密钥、备份文件或客户数据目录,也应一并加入忽略列表。

例如:

Terminal window
tree -L 3 -I '.git|.env*|secrets|backup|data|node_modules|.venv'

5. tree 能代替 find 吗?

不能完全代替。

tree 更适合人类阅读目录结构,重点是可视化层级。

find 更适合批量查找、筛选和脚本自动化,例如:

Terminal window
find . -name '*.log' -mtime +7

日常开发中可以这样理解:

tree:看目录结构
find:按条件查找文件
ls:快速查看当前目录

6. tree 能在服务器上安全使用吗?

一般来说是安全的,因为它只读取目录和文件名,不会修改内容。

但要注意两点:

  1. 不要在包含海量文件的目录中无限制执行;
  2. 不要将包含敏感文件名的输出直接公开到 GitHub、博客或工单系统。

对于服务器排障,建议从小目录开始,并限制深度:

Terminal window
tree -L 2 /opt/my-app

总结

tree 是一个简单但高频的命令行工具,适合快速观察项目、服务器目录和文件组织方式。

最值得记住的几个用法是:

tree -L 2 限制目录层级
tree -d -L 3 只显示目录
tree -a 显示隐藏文件
tree -I 'node_modules|.git|.venv' 排除无关内容
tree -P '*.py' --prune 只看指定类型文件
tree ... > project-tree.txt 导出目录结构

对于日常开发,建议把下面的命令作为默认习惯:

Terminal window
tree -L 3 -I 'node_modules|.git|.venv|__pycache__|dist|build'

它既能保持输出清晰,也足够展示一个项目的大部分核心结构。