Windows和Linux的tree工具
目录
1.前言
2.Linux的tree工具
2.1.安装tree
2.2.常用命令与参数
2.3.常见应用场景
2.4.注意事项
3.Windows的tree工具
3.1.基础语法
3.2.核心参数详解
3.3.常见应用场景
3.4.局限性与增强方案
4.Windows 与 Linux tree 的核心差异
5.tree工具优势
5.总结
相关链接
1.前言
在阅读工程源代码的时候,一开始很想大概浏览一下整个项目的目录,层次结构和各目录大致有那些文件,如下面这种:
此时,tree命令就正好用得到。
tree 是一个实用的目录列表工具,以树形结构递归显示文件和目录,直观展示层级关系。它支持自定义过滤、排序、输出格式等功能,是管理文件系统的利器。Windows 和 Linux 系统中都有类似工具,但功能和使用方式略有差异。
2.Linux的tree工具
Linux 系统通常默认不预装 tree
,但可以通过包管理器快速安装,功能丰富且参数灵活。
2.1.安装tree
Debian/Ubuntu 系:
sudo apt update && sudo apt install tree
RedHat/CentOS 系:
sudo yum install tree # CentOS 7及以下
# 或
sudo dnf install tree # CentOS 8+/Fedora
Arch 系:
sudo pacman -S tree
2.2.常用命令与参数
基本语法:tree [参数] [目录路径]
(默认显示当前目录)
通过 man tree 命令查看帮助信息
大致看了下,翻译了一些常见的选项如下:
-a #显示所有文件和目录
-d #显示目录名称而非文件
-l #如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录
-f #在每个文件或目录之前,显示完整的相对路径名称
-x #将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该目录予以排除在寻找范围外
-L level #限制目录显示层级
-R #不要列出与给定模式匹配的文件
-P pattern #<范本样式> 只显示符合范本样式的文件和目录名称
-I pattern #不列出与给定模式匹配的文件
--ignore-case #模式匹配时忽略大小写
--matchdirs #在-P模式匹配中包含目录名
--noreport #关闭树列表末尾的文件/目录计数
--charset X #将字符集X用于终端/HTML和缩进行输出
--filelimit #请勿下载包含超过个文件的目录
--timefmt <f> #根据格式<f>打印和格式化时间
-o filename #输出到文件而不是输出到屏幕
--du #打印目录大小
--prune #从输出中删除空目录
-------- 文件选项 ---------
-q #用“?”号取代控制字符,列出文件和目录名称
-N #直接列出文件和目录名称,包括控制字符
-Q #用双引号引用文件名
-p #列出权限标示
-u #列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码
-g #列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码
-s #列出文件和目录大小
-h #以更易读的方式打印大小
--si #类似于-h,但使用国际单位制(1000的幂)
-D #列出文件或目录的更改时间
-F #在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","@","|"号
--inodes #打印每个文件的索引节点号
--device #打印每个文件所属的设备ID号
------- 排序选项 -------
-v #按字母数字对文件进行排序
-t #用文件和目录的更改时间排序
-c #按最后的更改时间对文件进行排序
-U #天下黄河
-r #反转排序顺序
--dirsfirst #在文件之前列出目录(-U禁用)
--sort X #选择排序:名称、版本、大小、时间、时间
------- 图形选项 ------
-i #不以阶梯状列出文件和目录名称
-A #使用ASNI绘图字符显示树状图而非以ASCII字符组合
-S #使用CP437(控制台)图形压痕线打印
-n #始终关闭着色(-C覆盖)
-C #在文件和目录清单加上色彩,便于区分各种类型
------- XML / HTML / JSON选项 -------
-X #打印出XML表示形式的树
-J #打印出JSON表示形式的树
-H baseHREF #打印出以baseHREF为顶部目录的HTML格式
-T string #将默认HTML标题和H1标头替换为字符串
--nolinks #关闭HTML输出中的超链接
---- 杂项选项 ----
--version #输入版本信息
--help #打印使用帮助信息
-- #选项处理终止符
2.3.常见应用场景
1.查看项目核心结构(排除冗余目录)
# 显示Python项目前3层结构,排除虚拟环境、缓存和日志目录
tree -L 3 -I "venv|__pycache__|logs" -d
2.生成带文件大小的文档目录树(用于说明文档)
# 显示docs目录所有内容(包括隐藏文件),带大小,不显示统计,保存到文件
tree -a -h --noreport docs/ -o docs_tree.txt
3.筛选特定类型文件并显示完整路径
# 查找所有.sh脚本,显示完整路径,限制2层深度
tree -L 2 -f -P "*.sh"
4.查看目录权限结构(系统管理)
# 查看/etc下的权限和目录结构,先显示目录
tree -d -p --dirsfirst /etc -L 2
5.显示文件权限、所有者和所有组(-p、-u、-g)
6.完整路径显示(-f)
7.输出重定向(-o)
[root@blog ~]# tree -o structure.txt #将结果保存到文件#验证
[root@blog ~]# cat structure.txt
.
├── anaconda-ks.cfg
├── dir1
│ ├── file1.txt
│ └── subdir
├── dir2
│ └── report.pdf
└── structure.txt3 directories, 4 files
8.以易读的格式输出文件目录(-h)
[root@blog ~]# tree -h
.
├── [ 1.5K] anaconda-ks.cfg
├── [ 37] dir1
│ ├── [ 0] file1.txt
│ └── [ 6] subdir
├── [ 24] dir2
│ └── [ 0] report.pdf
└── [ 469] structure.txt3 directories, 4 files
9.生成JSON格式列表(-J)
10.查看文件占用空间大小
11.结合grep过滤内容
2.4.注意事项
1.超大目录建议配合-L参数限制遍历层数。
2.使用 tree | grep "files"可以显示文件总数,输出末尾会统计
3.tree命令若不添加任何选项,默认显示当前目录下所有可见文件和目录(不含隐藏文件),并在末尾显示统计信息(总目录数、总文件数)。
3.Windows的tree工具
Windows 系统中的 tree
工具主要用于在命令行(CMD 或 PowerShell)中以树形结构展示目录和文件,虽然功能不如 Linux 版本丰富,但足以满足基础的目录可视化需求。
3.1.基础语法
在 CMD 命令提示符 中直接使用(PowerShell 需通过兼容模式调用),基本格式:
tree [目录路径] [参数]
- 若不指定
[目录路径]
,默认显示当前目录的结构。 - 若不添加参数,默认只显示目录(不包含文件),并在末尾显示统计信息(总目录数)。
3.2.核心参数详解
Windows 的 tree
工具参数较少,主要有以下 2 个常用参数:
参数 | 功能说明 | |
---|---|---|
/f | 显示目录结构的同时,包含所有文件(默认只显示目录)。 | |
/a | 用 ASCII 字符 显示树形边框(如 + 、- 、` | ),默认用 Unicode 字符(如 ├、 ─`)。适合在不支持 Unicode 的环境中使用(避免乱码)。 |
3.3.常见应用场景
1.显示当前目录的目录结构(不含文件)
tree卷 系统 的文件夹 PATH 列表
卷序列号为 XXXX-XXXX
C:\USER\PROJECT
├─docs
├─src
│ └─utils
└─tests
2.显示当前目录的完整结构(包含所有文件)
tree /f卷 系统 的文件夹 PATH 列表
卷序列号为 XXXX-XXXX
C:\USER\PROJECT
├─docs
│ └─README.md
├─src
│ ├─main.py
│ └─utils
│ └─helper.py
└─tests└─test_main.py
3.显示指定目录的结构(如 D 盘的 Downloads 文件夹)
tree D:\Downloads /f
作用:展示 D:\Downloads
目录下的所有子目录和文件。
4.用 ASCII 字符显示结构(避免 Unicode 乱码)
tree /a 卷 系统 的文件夹 PATH 列表
卷序列号为 XXXX-XXXX
C:\USER\PROJECT
+---docs
+---src
| \---utils
\---tests
5.将目录结构输出到文件(用于保存或分享)
tree /f > 目录结构.txt
作用:将当前目录的完整结构(含文件)写入 目录结构.txt
文件,方便在文档中引用或发送给他人。
3.4.局限性与增强方案
Windows 原生 tree
工具功能较简单,不支持 以下功能:
- 限制显示层级(如只显示前 2 层);
- 过滤特定类型文件(如只显示
.txt
文件); - 排除指定目录(如忽略
node_modules
); - 显示文件大小、权限等属性。
若需要更强大的功能,可安装 类 Linux 的 tree
工具:
1.先安装 Windows 包管理器 Chocolatey(管理员 PowerShell 中执行):
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
2.安装增强版 tree
:
choco install tree
3.使用方法与 Linux tree
完全一致(支持 -L
、-I
等参数):
tree -L 2 -I "venv" # 显示2层结构,排除venv目录
4.Windows 与 Linux tree
的核心差异
特性 | Linux tree | Windows 原生 tree |
---|---|---|
功能丰富度 | 高(支持过滤、大小显示、深度控制等) | 低(仅基础目录树显示) |
隐藏文件显示 | 支持(-a 参数) | 不支持(需手动筛选) |
跨平台一致性 | 各 Linux 发行版用法统一 | 仅 CMD 支持,PowerShell 需模拟 |
安装需求 | 需手动安装(多数系统) | 系统自带(CMD 中) |
5.tree
工具优势
1.直观的层级可视化,一目了然
tree
以树形分支结构展示目录和文件的层级关系,用线条(如 |
、├─
、└─
)清晰区分父子目录,相比 ls -lR
等命令输出的平铺式列表,能瞬间让人理解目录的嵌套逻辑。
例如,一个项目的树形结构:
project/
├── src/
│ ├── main.py
│ └── utils/
│ └── helper.py
├── docs/
│ └── README.md
└── requirements.txt
这种结构比逐行查看路径更易把握整体框架,尤其适合复杂项目(如代码仓库、多层级文档)。
2.灵活控制显示范围,避免信息过载
tree
支持通过参数精准过滤内容,只展示需要的信息,避免被冗余内容干扰:
- 限制深度:用
-L N
(Linux)或通过工具扩展(Windows)控制显示的层级(如只看前 2 层),适合大型目录(如系统文件、深度学习项目)。 - 只看目录 / 文件:用
-d
(Linux)只显示目录,或结合-f
只关注文件,快速定位 “容器” 或 “内容”。 - 按名称过滤:用
-P 模式
(如-P "*.py"
)只显示特定类型文件,或-I 模式
(如-I "venv"
)排除冗余目录(如虚拟环境、缓存文件夹)。
3.高效集成额外信息,一站式获取关键数据
除了结构,tree
能通过参数直接附加实用信息,无需额外命令:
- 文件大小:
-h
(Linux)以人类可读单位(K、M、G)显示大小,快速判断大文件位置。 - 完整路径:
-f
(Linux)显示每个文件 / 目录的绝对路径,方便直接复制使用(如在脚本中引用)。 - 隐藏文件:
-a
(Linux)显示.gitignore
、.env
等隐藏文件,避免遗漏关键配置。
4. 轻量快捷,跨场景适配性强
- 操作简单:基础用法只需
tree [目录]
,无需记忆复杂参数,新手也能快速上手。 - 跨平台兼容:Linux、macOS(需安装)、Windows(原生或第三方工具)均支持,习惯后可在不同系统中保持一致操作。
- 便于分享与存档:输出结果可直接重定向到文件(如
tree > structure.txt
),用于文档记录、项目说明或远程沟通(如向同事展示目录结构)。
5.总结
tree
工具的核心优势在于将复杂的目录关系 “图形化”,同时通过灵活的过滤和信息附加功能,帮助用户在短时间内掌握目录的整体结构、关键文件位置和必要属性,大幅提升文件管理和项目梳理的效率,尤其适合开发者、运维人员或需要频繁处理多层级文件的场景。
相关链接
Linux 教程 | 菜鸟教程