tree命令默认未预装于多数linux发行版,需手动安装;显示中文乱码应加-n参数;限深用-l、过滤用-i/-p;存档时去色并禁用统计更适配ci。

tree 命令不存在或提示 command not found
很多 Linux 发行版(比如 CentOS、Alpine、最小化安装的 Ubuntu)默认不带 tree,不是你装错了,是它压根没装。
实操建议:
- Ubuntu/Debian 系:运行
sudo apt install tree - CentOS/RHEL/Fedora:用
sudo yum install tree或sudo dnf install tree - Alpine:
apk add tree - macOS(用 Homebrew):
brew install tree
装完直接敲 tree 就能用了——别试 man tree,有些系统装完 man 页面也不自带,查帮助用 tree --help 更靠谱。
tree 显示中文乱码或缩进错位
本质是终端字符宽度和 tree 对 Unicode 字符宽度的判断不一致,尤其在含中文、emoji 或全角符号的文件名里特别明显。
常见错误现象:分支线断开、文字重叠、目录名被截断。
实操建议:
- 加
-N参数强制按字面显示(禁用自动转义),例如:tree -N /path - 避免用
-i(不画竖线)配合中文——它会让结构更难读,不是真“修复” - 如果仍错位,试试
tree --charset UTF-8(部分新版支持),但不如-N通用 - 终端本身用等宽字体(如 Fira Code、Source Code Pro),别用微软雅黑这类非等宽中文字体
限制深度、过滤类型、避开特定目录
tree 的实用价值不在“全量展开”,而在快速聚焦。默认递归到底,大项目下卡住或信息过载很常见。
使用场景:看源码结构、查配置目录层级、审计日志路径分布。
实操建议:
- 限深:用
-L 2只看两层,tree -L 3 src/比tree src/ | head -50干净得多 - 只看目录(不含文件):
-d,例如查 Docker 构建上下文有哪些子目录:tree -L 2 -d - 排除 node_modules、.git:
-I 'node_modules|.git|__pycache__',注意用管道分隔,正则不生效,就是字面匹配 - 只显示 .js 文件:
-P '*.js';多个后缀写成-P '*.{js,ts}'(需 shell 支持 brace expansion)
输出为文件或适配 CI 日志阅读
直接终端跑 tree 很方便,但存档、发给同事、塞进 CI 日志时,缺行号、无颜色、编码易出问题。
性能影响:加 --noreport 能少一行统计(如 “32 directories, 147 files”),对自动化脚本更干净。
实操建议:
- 保存结果:
tree -L 2 --noreport > dir-tree.txt - 去色适配纯文本环境(如 GitHub Actions 输出):
tree -C | sed 's/\x1b\[[0-9;]*m//g' > clean.txt,-C开颜色,sed 去 ANSI 转义 - 想带行号?别 pipe 给
nl,先重定向再处理,否则 tree 的树形缩进会被 nl 打乱 - 超大目录慎用
-a(显示隐藏文件),.git 下几十万对象会拖慢几秒甚至卡死
tree 不是 ls 的替代品,它解决的是“关系可视”,不是“快速列文件”。真正要遍历处理,还是 find + shell 更稳——tree 只负责让人一眼看懂“谁在谁下面”。










