Windows下用tree生成目录树:从安装到解决中文乱码全指南
在查看开源项目或技术文档时,经常会看到 README.md 里有整齐的目录树结构,比如这样:
.
├── data
│ ├── train.csv
│ └── test.csv
├── src
│ ├── main.py
│ └── utils.py
└── README.md
这种结构清晰展示了文件层级,能让读者快速了解项目布局。但很多人不知道这是怎么生成的,其实用 tree 命令就能轻松实现。本文就详细讲解在 Windows 系统下如何安装和使用 tree,以及如何解决最让人头疼的中文乱码问题。
一、为什么需要用 tree 生成目录树?
- 提升可读性:手动编写目录结构不仅繁琐,还容易因层级错乱导致阅读困难,
tree能自动生成整齐的树状结构。 - 便于协作:分享项目时,目录树能让合作者快速定位文件位置(比如数据集放在哪个文件夹、代码入口在哪里)。
- 灵活定制:支持指定显示层级、排除无关目录(如日志文件夹),避免输出冗余信息。
二、避坑:别用 Windows 自带的 tree
Windows 终端(CMD/PowerShell)自带 tree 命令,但功能极有限:
- 不支持自定义显示层级,会强制输出所有子目录,文件多的时候极其冗长;
- 对中文支持差,容易出现乱码;
- 无法排除特定目录(比如
node_modules、log等无关文件夹)。
因此,推荐安装第三方 tree 工具,配合 Git Bash 使用,功能更全、兼容性更好。
三、安装步骤:搭配 Git Bash 使用
1. 下载 tree 工具
进入 GnuWin32 官网,下载 tree-1.5.2.2-bin.zip(直接搜索文件名更快)。
2. 配置到 Git 环境
- 假设 Git 安装在
E:\Git(默认路径通常是C:\Program Files\Git),打开Git\usr\bin目录; - 将下载的压缩包解压,把
tree.exe复制到usr\bin目录下; - 验证是否安装成功:打开 Git Bash,输入
tree --version,若显示版本信息则安装成功。
四、常用命令:快速生成目录树
在 Git Bash 中进入目标文件夹,输入以下命令即可生成目录树,核心参数如下:
| 参数 | 作用 | 示例 |
|---|---|---|
-A | 用 ASCII 字符绘制连接线(更美观) | tree -A |
-L n | 指定显示层级(n 为数字,如 -L 2) | tree -A -L 2(显示2级目录) |
-I "xxx" | 排除名称包含 xxx 的目录/文件 | tree -A -I "log"(排除log) |
-f | 显示完整文件路径 | tree -A -f |
基础示例:
# 显示当前目录下2级结构,用ASCII线条,排除log和tmp文件夹
tree -A -L 2 -I "log|tmp"
输出效果:
.
├── data
│ ├── train.csv
│ └── test.csv
├── src
│ ├── main.py
│ └── utils.py
└── README.md
五、解决中文乱码:关键技巧
很多人用 tree 时会遇到中文显示为 ▒▒ 或八进制转义符(如 \271\372)的问题,这是因为编码不匹配。以下是针对性解决方案:
1. 确认终端编码为 UTF-8
Git Bash 默认编码可能不是 UTF-8,先手动设置:
# 在Git Bash中执行,临时切换为UTF-8编码
export LANG=zh_CN.UTF-8
2. 强制 tree 输出指定编码
如果文件名是 GBK 编码(Windows 系统常见),用 --charset 参数指定编码:
# 强制输出GBK编码,适配中文文件名
tree -A -L 2 --charset gbk
3. 编码转义:GBK 转 UTF-8
若终端是 UTF-8 编码,但文件名是 GBK,用 iconv 转码:
# 将GBK输出转为UTF-8,解决乱码
tree -A -L 2 --charset gbk | iconv -f gbk -t utf-8
4. 终极方案:用 find 命令替代(彻底避免转义)
如果 tree 始终乱码,可用 find 命令模拟目录树(纯中文环境更稳定):
# 显示1级文件夹及2级内容(.doc/.docx文件和文件夹)
for dir in */; do
echo "├── ${dir%/}"
find "$dir" -maxdepth 1 -type d -o -name "*.doc" -o -name "*.docx" | sort | while read item; do
if [ "$item" != "$dir" ]; then
subitem="${item#$dir}"
echo "│ ├── $subitem"
fi
done
done
echo "└── $(ls -d */ | tail -n1 | sed 's/\/$//')"
六、注意事项
- 必须用代码块展示:在 Markdown 中,目录树需放在 ```代码块内,否则格式会错乱。
- 参数组合使用:
-A是美观的关键,建议始终带上;-L控制层级,避免输出过多。 - 特殊字符处理:若文件名含空格或特殊符号,用双引号包裹路径(如
tree -A "my folder")。
Windows下生成目录树指南

被折叠的 条评论
为什么被折叠?



