适合 Linux 命令入门 · 项目结构查看 · 文件目录整理
关键词:tree、目录树、Linux命令、文件过滤、目录层级
tree命令用于以树状结构展示目录和文件,是查看项目结构、整理文件层级、输出目录清单时非常实用的工具。
日常使用时,最常用的能力主要有两个:按层级展示目录结构和按规则过滤或排序内容。其中,控制显示深度最常用的参数是-L N。
一、tree 命令是什么
tree是 Linux 中用于展示目录结构的命令。相比ls只能列出当前目录内容,tree可以递归展示子目录,让项目结构一目了然。
例如,一个项目目录可能包含源码目录、配置文件、构建目录、日志目录等。使用tree后,可以清楚看到每个目录下面还有哪些子目录和文件。
它特别适合以下场景:
| 场景 | 作用 |
|---|---|
| 查看项目结构 | 快速了解一个项目的目录层级 |
| 写文档 | 把目录结构复制到 README 或博客中 |
| 排查文件位置 | 查找某类文件分布在哪些目录下 |
| 过滤无关目录 | 排除.git、node_modules、build等目录 |
| 导出目录清单 | 将目录结构保存为txt或md文件 |
二、tree 命令的安装方式
2.1 Ubuntu / Debian 系统安装
在 Ubuntu 或 Debian 系统中,可以使用apt安装。
# 更新软件包索引,确保能够获取最新的软件包信息sudoaptupdate# 安装 tree 命令,并使用 -y 自动确认安装sudoapt-yinstalltree安装完成后,可以通过下面的命令验证是否安装成功。
# 查看 tree 命令版本,验证 tree 是否可用tree--version2.2 CentOS / RHEL 系统安装
在 CentOS 或 RHEL 系统中,可以使用yum或dnf安装。
# 在较老版本 CentOS 中使用 yum 安装 treesudoyum-yinstalltree# 在较新版本 RHEL / CentOS Stream / Fedora 中使用 dnf 安装 treesudodnf-yinstalltree三、tree 命令的基本用法
3.1 查看当前目录结构
# 在当前目录下输出完整目录树tree执行后,tree会从当前目录开始递归展示文件和目录。
示例输出如下:
.├── README.md ├── src │ ├── main.c │ └── utils.c ├── include │ └── utils.h └── build └── main其中:
| 符号 | 含义 |
|---|---|
. | 当前目录 |
├── | 当前层级中的一个普通分支 |
└── | 当前层级中的最后一个分支 |
│ | 表示当前目录还有后续分支 |
3.2 查看指定目录结构
# 查看 path 目录下的目录树tree path/这里的path/可以替换成实际目录路径,例如:
# 查看 /etc 目录下的目录树tree /etc不过,像/etc、/usr、/var这类目录内容较多,直接执行可能会输出大量内容。因此在大目录中更推荐配合-L限制深度。
四、使用 -L 控制显示深度
4.1 基本语法
# 只展开到第 1 层,也就是只展示当前目录的直接子项tree-L1# 只展开到第 2 层,也就是展示当前目录、子项以及子项的子项tree-L2# 对指定目录展开 3 层tree-L3path/4.2 深度规则说明
tree -L N中的N表示最多展示到第几层。
| 命令 | 展示范围 | 适用场景 |
|---|---|---|
tree -L 1 | 当前目录 + 第一层子项 | 快速看目录入口 |
tree -L 2 | 当前目录 + 子项 + 子项的子项 | 查看项目大致结构 |
tree -L 3 | 展开到第三层 | 查看较完整的项目目录 |
tree -L 4 | 展开到第四层 | 适合结构不太大的项目 |
起始目录可以理解为第 0 层,-L 1展示第 0 层和第 1 层,-L 2再多展示一层。
例如:
# 查看当前项目的二级目录结构tree-L2这类命令非常适合用来查看项目骨架,而不会把所有深层文件全部刷出来。
五、tree 常用参数说明
5.1 常用选项清单
| 参数 | 作用 | 示例 | |
|---|---|---|---|
-a | 显示隐藏文件 | tree -a | |
-d | 只显示目录,不显示文件 | tree -d | |
-f | 显示完整路径 | tree -f | |
-h | 以人类可读方式显示文件大小 | tree -h | |
--du | 显示目录聚合大小 | tree -h --du | |
--dirsfirst | 目录排在文件前面 | tree --dirsfirst | |
--sort=size | 按文件大小排序 | tree --sort=size | |
-t | 按修改时间排序 | tree -t | |
-U | 不排序,按目录原始顺序输出 | tree -U | |
-I | 排除匹配项 | `tree -I 'node_modules | .git’` |
-P | 只显示匹配项 | tree -P '*.c' | |
--prune | 过滤后裁掉空目录 | tree -I 'build' --prune | |
-o | 将结果输出到文件 | tree -o tree.txt | |
--filelimit | 限制单个目录中文件数量 | tree --filelimit 200 | |
-C | 强制彩色输出 | tree -C | |
-n | 禁用彩色输出 | tree -n |
5.2 隐藏文件与目录显示
Linux 中,以.开头的文件或目录默认属于隐藏项,例如.git、.env、.vscode。
# 显示普通文件、目录以及隐藏文件tree-a如果只想看隐藏项是否存在,可以配合层级限制:
# 展示当前目录下第一层内容,包括隐藏文件tree-a-L15.3 只显示目录骨架
# 只显示目录,不显示文件tree-d如果只想看项目结构,而不关心具体文件,可以使用:
# 只显示三级目录骨架tree-d-L3-d很适合用于分析项目模块划分,因为它会把大量文件隐藏掉,只保留目录层级。
5.4 显示文件大小与目录总大小
# 显示文件大小,并使用 K、M、G 等单位展示tree-h如果希望目录也显示聚合大小,可以加入--du。
# 显示文件大小,并统计目录总占用tree-h--du对于大项目,可以限制层级:
# 查看当前目录二级范围内的大小分布tree-L2-h--du5.5 排序显示
# 按文件修改时间排序tree-t# 按文件大小排序tree--sort=size# 不进行排序,按照文件系统原始顺序输出tree-U常见排序方式如下:
| 排序方式 | 命令 | 说明 |
|---|---|---|
| 按名称排序 | 默认行为 | 最常见 |
| 按修改时间排序 | tree -t | 适合找最近修改文件 |
| 按大小排序 | tree --sort=size | 适合排查大文件 |
| 不排序 | tree -U | 速度可能更快 |
六、tree 的过滤用法
6.1 使用 -I 排除文件或目录
# 排除 .git、node_modules、dist、build 目录tree-I'.git|node_modules|dist|build'常见项目中,下面这些目录经常需要排除:
| 目录或文件 | 说明 |
|---|---|
.git | Git 版本管理目录 |
node_modules | 前端依赖目录,通常很大 |
dist | 打包输出目录 |
build | 编译生成目录 |
__pycache__ | Python 缓存目录 |
.idea | JetBrains 系列 IDE 配置目录 |
.vscode | VS Code 配置目录 |
6.2 使用 -P 只显示匹配项
-P用于只显示符合模式的文件或目录。
# 只显示 .c 文件tree-P'*.c'# 只显示 Markdown 文件tree-P'*.md'如果使用-P后出现很多空目录,可以配合--prune。
# 只显示 Markdown 文件,并裁掉空目录tree-P'*.md'--prune6.3 使用 --prune 裁掉空目录
当使用-I或-P过滤后,某些目录可能已经没有可显示内容,但仍然被保留下来。此时可以使用--prune自动裁剪空目录。
# 排除常见无关目录,并自动裁掉空目录分支tree-I'.git|node_modules|dist|build'--prune--prune的作用是让输出更干净,特别适合写文档或博客时展示项目结构。
七、典型场景示例
7.1 查看项目二级结构
# 查看当前项目二级目录结构,目录优先显示,并排除常见构建产物tree-L2--dirsfirst-I'node_modules|dist|build|.git'--prune这个命令适合查看前端项目、后端项目或普通工程项目的大体结构。
参数含义如下:
| 参数 | 含义 |
|---|---|
-L 2 | 只展开到第二层 |
--dirsfirst | 目录排在文件前 |
-I | 排除指定文件或目录 |
--prune | 裁掉过滤后为空的目录 |
7.2 只看目录骨架
# 只显示目录结构,并展开到第三层tree-d-L3这个命令适合分析项目模块,不会被大量文件干扰。
7.3 查看文件大小
# 以人类可读方式显示文件大小,并统计目录总占用tree-L2-h--du其中:
| 参数 | 含义 |
|---|---|
-h | 使用 K、M、G 等单位显示大小 |
--du | 显示目录聚合大小 |
-L 2 | 限制展示深度,避免输出过多 |
7.4 打印完整路径并导出结果
# 打印完整路径,排除 .git 和 __pycache__,并把结果保存到 tree.txttree-L2-f-I'.git|__pycache__'--prune-otree.txt这个命令适合把目录结构保存下来,后续可以粘贴到文档、博客或项目说明中。
7.5 限制大目录输出数量
# 当某个目录中文件过多时,限制每个目录最多展示 200 个文件tree-L2--filelimit200在大目录下使用 tree 时,一定要优先加-L或--filelimit,否则可能输出非常多内容。
7.6 配合 less 查看超宽输出
# 使用 less 查看 tree 输出,并用 -S 禁止自动换行tree-L2|less-S这里的less -S表示不自动折行。如果某一行太长,可以用键盘左右方向键横向滚动查看。
八、常见问题与排障
8.1 tree 输出太多怎么办
优先使用下面几种方式控制输出规模:
# 限制显示深度tree-L2# 排除无关目录tree-I'node_modules|dist|build|.git'# 限制单个目录最大展示文件数量tree--filelimit200大目录不要直接运行tree,否则很容易刷屏,甚至影响终端使用体验。
8.2 -I 和 -P 为什么要加引号
-I和-P后面的模式经常会用到*、?、|等通配符。如果不加引号,Shell 可能会提前把这些字符解析掉,导致tree收到的规则不是你想要的规则。
推荐写法:
# 推荐写法:过滤规则使用引号包起来tree-I'node_modules|dist|build|.git'不推荐写法:
# 不推荐写法:没有引号时,通配符可能被 Shell 提前展开tree-Inode_modules|dist|build|.git8.3 为什么过滤后还有空目录
这是因为-I或-P只负责过滤内容,不一定自动删除空目录分支。
解决方法是加上--prune。
# 过滤后自动裁掉空目录tree-I'node_modules|dist|build|.git'--prune8.4 如何只统计目录数量
tree输出末尾通常会自动显示统计信息,例如:
# 只显示目录,并在末尾输出目录数量统计tree-d输出末尾可能类似:
12directories如果显示文件和目录,末尾可能类似:
12directories,38files九、常用命令速查表
| 需求 | 命令 | |
|---|---|---|
| 查看当前目录树 | tree | |
| 只展开一层 | tree -L 1 | |
| 展开二级项目结构 | tree -L 2 | |
| 只显示目录 | tree -d | |
| 显示隐藏文件 | tree -a | |
| 目录排在文件前 | tree --dirsfirst | |
| 排除指定目录 | `tree -I 'node_modules | .git’` |
| 过滤后裁掉空目录 | `tree -I 'node_modules | .git’ --prune` |
| 只显示指定文件 | tree -P '*.md' --prune | |
| 显示文件大小 | tree -h | |
| 显示目录总大小 | tree -h --du | |
| 输出到文件 | tree -o tree.txt | |
| 使用分页器查看 | tree -L 2 | less -S |
十、总结
对于普通使用场景,最推荐记住这一条命令:
# 查看项目二级结构,目录优先显示,排除常见无关目录,并裁掉空目录tree-L2--dirsfirst-I'node_modules|dist|build|.git|__pycache__'--prune它适合大多数项目结构查看、文档编写和目录整理场景。掌握这条命令后,再根据需要添加-a、-d、-h、--du、-o等参数,就能覆盖绝大多数tree的实际使用需求。