在只有命令行的终端环境,使用 ls
或是 cd
这类命令很难直观的体现一个目录中的文件结构和层次,tree
命令可以解决这个问题。它能以结构化的树形方式递归展示目录的深度和层级。除了能在终端直接展现目录树形图,它还能把结构数据以 HTML 或是 JSON 格式导出,这给命令的使用场景增添了更多可能性。
一些 Linux 系统上默认没有提供 tree
命令,使用前需要先安装。这通常使用系统自带的包管理命令就能解决。比如在 Arch Linux 上安装:
sudo pacman -S tree
Debian 或 Ubuntu Linux 可以使用 Apt 安装:
sudo apt install tree
tree 命令格式
tree [选项...] [目录位置]
tree 命令示例
不指定任何选项和位置的 tree
命令会展示当前所在位置的目录树形图:
tree
展示指定位置 ./zzxworld 的目录树形图:
tree ./zzxworld
命令输出的格式大致如下:
./zzxworld
├── abc
├── a.txt
└── b.txt
1 directory, 2 files
使用 -X
选项可以让数据以 XML 格式输出:
tree -X ./zzxworld
<?xml version="1.0" encoding="UTF-8"?>
<tree>
<directory<directory name="./zzxworld">
<directory<directory name="abc"></directory>
<file<file name="a.txt"></file>
<file<file name="b.txt"></file>
</directory>
<report>
<directories>1</directories>
<files>2</files>
</report>
</tree>
使用 -J
选项能以 JSON 格式输出:
tree -J ./zzxworld
[
{"type":"directory","name":"./zzxworld","contents":[
{"type":"directory","name":"abc"},
{"type":"file","name":"a.txt"},
{"type":"file","name":"b.txt"}
]}
,
{"type":"report","directories":1,"files":2}
]
tree 命令选项
tree
命令提供了丰富的选项和参数可以自定义一些输出行为和展现方式。这些选项按照用途大致可以分为:列表选项,文件选项,排序选项,图形化选项,输出选项,输入选项和常规选项。
列表选项
选项名称 | 说明 |
---|---|
-a |
显示所有文件。 |
-d |
只显示目录。 |
-l |
显示符号链接类型的目录。 |
-f |
显示文件完整的路径信息。 |
-x |
只使用当前文件系统。 |
-L level |
设置目录显示的最大层级。 |
-R |
递归遍历显示每个目录。 |
-P pattern |
只显示符合 pattern 匹配规则的文件和目录。 |
-I pattern |
不显示符合 pattern 匹配规则的文件或目录。 |
--ignore-case |
忽略大小写。 |
--matchdirs |
只匹配目录,和 -P 选项配合使用。 |
--prune |
不显示空目录。 |
--noreport |
不显示最后的文件和目录数量汇总信息。 |
--charset |
设置字符集。 |
--filelimit # |
限制目录文件显示数量。 |
--timefmt format |
以指定格式格式化并显示日期。 |
-o filename |
将结果输出到指定文件。 |
文件选项
选项名称 | 说明 |
---|---|
-q |
使用问号替代文件名中的特殊字符。 |
-N |
不转义显示特殊字符。 |
-Q |
使用双引号显示文件名。 |
-p |
显示文件类型和权限。 |
-u |
显示用户名。 |
-g |
显示用户组。 |
-s |
显示文件大小。 |
-h |
以可读的样式显示文件大小。 |
--si |
跟 -h 类似,不过计量单位是 1000。 |
--du |
显示目录大小。 |
-D |
显示文件最后修改时间。 |
-F |
显示附加符号。目录是 / , socket 文件是 = , 可执行文件是 * 。 |
--inodes |
显示文件或目录的节点编号(inode number)。 |
--device |
显示文件或目录所属设备编号。 |
排序选项
选项名称 | 说明 |
---|---|
-v |
按文件版本排序。 |
-t |
按文件最后修改时间排序。 |
-c |
按文件最近修改状态排序。 |
-U |
不使用排序。 |
-r |
反向排序。这需要配合其他排序选项。 |
--dirsfirst |
目录优先显示。 |
--sort[=]type |
按指定类型排序。可用值: ctime , mtime , size , version 。 |
图形化选项
选项名称 | 说明 |
---|---|
-i |
不显示缩进。 |
-A |
使用 ANSI 字符显示压痕线。 |
-S |
启用 CP437 图形选项,使用 Linux 控制台模式字体时会有帮助。 |
-n |
关闭色彩化输出。 |
-C |
启用色彩化输出。 |
输出选项
选项名称 | 说明 |
---|---|
-X |
使用 XML 格式输出。 |
-J |
使用 JSON 格式输出。 |
-H baseHREF |
使用 HTML 格式输出。baseHREF 用来设置基本链接。 |
-T title |
使用 HTML 格式输出时设置 H1 标签内的标题内容。 |
--nolinks |
使用 HTML 格式输出时不使用超链接。 |
输入选项
选项名称 | 说明 |
---|---|
--fromfile |
从文件读取目录列表数据。此选项可以配合其他命令从标准输入获取列表数据源。 |
常规选项
选项名称 | 说明 |
---|---|
--help |
输出命令帮助信息。 |
--version |
输出命令版本信息。 |
-- |
终端处理选项。 |