在 Linux 下管理项目时,我们经常需要快速查看目录结构。tree 命令能将文件和目录以树形图的形式直观展示,远比 ls -R 清晰得多。本文将带你从零开始,掌握 tree 的安装、每一个参数的含义以及实战场景。
绝大多数最小化安装的 Linux 系统并不自带 tree,需要手动安装。
sudo apt update
sudo apt install tree -y
# CentOS 7 及以下
sudo yum install tree -y
# CentOS 8 / Fedora
sudo dnf install tree -y
tree --version
正常输出类似:tree v2.0.2 (c) 1996 - 2022 即表示成功。
tree
tree /home/user/projects
| 参数 | 说明 |
|---|---|
-L level |
限制显示的目录层级深度(level 为正整数) |
--filelimit num |
当目录下文件/子目录数超过 num 时,不再展开该目录(防止刷屏) |
示例:
# 只显示两层
tree -L 2
# 若某目录下文件超过 5 个则折叠
tree --filelimit 5
| 参数 | 说明 |
|---|---|
-d |
只显示目录,不显示文件 |
-f |
显示每个文件的完整相对路径 |
-F |
给目录加/,可执行文件加 *,链接加 @(类似 ls -F) |
-D |
显示文件/目录的最后修改时间 |
--inodes |
显示文件的 inode 号 |
--device |
显示设备号(高级调试用) |
示例:
# 只看目录结构
tree -d
# 显示带类型标识
tree -F
| 参数 | 说明 |
|---|---|
-v |
按版本号排序(如 file1, file2, file10) |
-t |
按修改时间排序(最新的在前) |
-c |
按状态变更时间排序(ctime) |
-U |
不排序,按目录原始顺序显示(更快) |
-r |
反转排序(配合 -t 使用,即最旧的在前) |
示例:
# 按时间排序显示
tree -t
# 按时间倒序(最新的在最后)
tree -tr
| 参数 | 说明 |
|---|---|
-C |
强制开启颜色(默认可能关闭,建议始终加此参数) |
-n |
强制关闭颜色(脚本中使用) |
-N |
原样打印非 ASCII 字符(解决中文乱码) |
-Q |
文件名用双引号括起来(处理含空格的文件) |
示例:
# 彩色显示 + 中文支持
tree -C -N
| 参数 | 说明 |
|---|---|
-o filename |
输出到文件,而不是屏幕 |
-h |
显示人类可读的文件大小(K/M/G) |
-s |
显示每个文件的字节大小 |
--si |
以 1000 为进制显示大小(而非 1024) |
-p |
显示权限(如 -rw-r--r--) |
-u |
显示文件所有者(用户名或 UID) |
-g |
显示文件所属组 |
示例:
# 显示权限 + 大小 + 时间
tree -p -h -D
# 导出到文件
tree -o tree_output.txt
| 参数 | 说明 |
|---|---|
-P pattern |
只显示匹配 pattern 的文件/目录(支持通配符) |
-I pattern |
排除匹配 pattern 的文件/目录 |
--prune |
当匹配到排除项时,连父目录也裁剪(配合 -I 使用) |
--matchdirs |
让 -P 也对目录名生效(默认只匹配文件) |
示例:
# 只看 .py 文件
tree -P "*.py"
# 排除 node_modules 和 .git
tree -I "node_modules|.git"
# 排除后还裁剪掉空父目录
tree -I "node_modules" --prune
| 参数 | 说明 |
|---|---|
-a |
显示隐藏文件(以 . 开头的文件) |
-l |
如果遇到符号链接,以链接目标为准显示(谨慎使用,避免死循环) |
-x |
只停留在当前文件系统,不进入其他挂载点 |
--noreport |
不显示最后的统计报告(文件/目录数量) |
示例:
# 显示所有隐藏文件
tree -a
# 不显示统计信息(适合只关注结构)
tree --noreport
tree -L 3 -C -N -o project_structure.txt
含义:深度 3 层、彩色、中文原样输出、保存到文件。
tree -d -L 2 -I "node_modules|.git|dist"
只看 2 层目录,排除常见冗余文件夹。
tree -p -u -g -h
快速查看哪些文件权限异常。
tree -P "*.log" --matchdirs
找出所有日志文件的位置。
tree -t -r -f | head -20
列出最近修改的前 20 个文件(含路径)。
Q1:tree 显示中文乱码怎么办?
加上 -N 参数,或者设置环境变量 export LC_ALL=en_US.UTF-8。
Q2:如何显示更深的层级但只想看目录?tree -L 5 -d,层级可以设得很大,因为 -d 只显示目录,内容不会太多。
Q3:tree 在脚本中怎么用?
用 -n 关掉颜色,用 -Q 给文件名加引号,方便后续解析。
Q4:能否让 tree 默认就带颜色?
可以给 tree 起别名:alias tree='tree -C -N',写入 ~/.bashrc 永久生效。

















