最近写博客的时候偶尔会需要将文件目录结构直观地列出来,例如python的包结构。
于是在网上搜了搜,发现了一个Linux下还不错的工具--tree
tree 可以很直观地显示多级目录结构。
1. 安装方法
Ubuntu上直接
sudo apt install tree
2. 几个比较常规的用法:
1. 显示目录结构
[[email protected] Test]# tree . └── Level-1 ├── L1-File-1.txt ├── L1-File-2.txt ├── Level-2-1 │ ├── L21-File-1.txt │ ├── Level-3-1 │ │ └── L31-File-1.txt │ ├── Level-3-2 │ │ └── L32-File-1.txt │ └── Level-3-3 │ └── L33-File-1.txt ├── Level-2-2 │ └── L22-File-1.txt └── Level-2-3 7 directories, 7 files
2. 包含隐藏文件
[[email protected] Test]# tree -a . └── Level-1 ├── L1-File-1.txt ├── L1-File-2.txt ├── .L1-hide.dat ├── Level-2-1 │ ├── L21-File-1.txt │ ├── .L2-hide.dat │ ├── Level-3-1 │ │ └── L31-File-1.txt │ ├── Level-3-2 │ │ └── L32-File-1.txt │ └── Level-3-3 │ └── L33-File-1.txt ├── Level-2-2 │ └── L22-File-1.txt └── Level-2-3 7 directories, 9 files
3. 控制深度(假设为3)
[[email protected] Test]# tree -L 3 . └── Level-1 ├── L1-File-1.txt ├── L1-File-2.txt ├── Level-2-1 │ ├── L21-File-1.txt │ ├── Level-3-1 │ ├── Level-3-2 │ └── Level-3-3 ├── Level-2-2 │ └── L22-File-1.txt └── Level-2-3 7 directories, 4 files
4. 只显示目录
[[email protected] Test]# tree -d . └── Level-1 ├── Level-2-1 │ ├── Level-3-1 │ ├── Level-3-2 │ └── Level-3-3 ├── Level-2-2 └── Level-2-3 7 directories
5. 对需要显示的文件进行过滤
# 只显示包含 "L2"字符串的文件,并将过滤后的空目录也同时过滤掉 [[email protected] Test]# tree -P ‘*L2*‘ --prune . └── Level-1 ├── Level-2-1 │ └── L21-File-1.txt └── Level-2-2 └── L22-File-1.txt 3 directories, 2 files # 只显示不包含 "L2"字符串的文件,并将过滤后的空目录也同时过滤掉 [[email protected] Test]# [[email protected] Test]# tree -I ‘*L2*‘ --prune . └── Level-1 ├── L1-File-1.txt ├── L1-File-2.txt └── Level-2-1 ├── Level-3-1 │ └── L31-File-1.txt ├── Level-3-2 │ └── L32-File-1.txt └── Level-3-3 └── L33-File-1.txt 5 directories, 5 files
3. 更多的选项
选项 | 说明 |
-a | 显示所有文件,包含隐藏文件。 |
-d | 只显示目录。 |
-l | 跟踪符号链接,如果链接的是一个目录,则当成目录处理。 |
-f | 显示完整路径。 |
-x | 只显示本文件系统。 |
-L level | 控制显示的目录深度。 |
-R | 在下级目录中,再次执行 tree 命令并且加上 ‘-o 00Tree.html‘选项,配合-L,-H使用。 |
-P pattern | 只显示匹配了 pattern 的文件(不是目录),支持简单的正则表达式。 |
-I pattern | 与-P相反,只显示没有匹配 pattern的文件。 |
--ignore-case | 当使用了-P或-I选项时,忽略大小写。 |
--matchdirs | 当使用了-P选项时,文件名包含完整路径。 |
--prune | 不显示空目录,如果经过-P或-I后没有目录下没有需要显示的,也当作空目录。 |
--noreport | 不显示最后的统计信息。 |
--charset charset | 指定字符集。 |
--filelimit # | 过滤掉文件个数超过 # 的目录。 |
--timefmt fmt | 按照指定的格式打印文件的修改时间。 |
-o filename | 将结果输出到文件。 |
-q | 用问号代替不可打印的字符。 |
-N | 用八进制代替不可打印的字符。 |
-Q | 用引号将文件名括起来。 |
-p | 显示文件的类型和权限。 |
-u | 显示文件所属的用户名或者UID。 |
-g | 显示文件所属的组或者GID。 |
-s | 显示文件的大小,单位:字节。 |
-h | 显示文件的大小,使用更人性化的显示。 |
--si | 显示文件的大小,类似 -h 但是使用国际公制单位(1k=1000)。 |
--du | 对于目录,显示其下所有文件的累计大小。 |
-D | 显示文件的最后修改时间。 |
-F | 类似 ls -F,对不同的文件类型,在末尾加上不同的字符。 |
--inodes | 显示文件的索引节点。 |
--device | 显示文件所属的设备号。 |
-v | 显示的文件列表按照version排序。 |
-t | 显示的文件列表按照最后修改时间排序。 |
-c | 显示的文件列表按照最后的状态改变时间排序。 |
-U | 不进行排序处理。 |
-r | 反向输出列表。 |
--dirsfirst | 优先显示目录(同一级别 ) |
--sort[=name] | 指定排序方式,name(default), ctime, mtime, size, version. |
-i | 输出中不要进行缩进。 |
-A | 使用ASCII的横线字符表示缩进。 |
-S | 使用CP437的横线字符表示缩进。 |
-n | 关闭颜色显示。 |
-C | 打开颜色显示。 |
-X | 使能XML格式输出。 |
-J | 使能JSON格式输出。 |
-H baseHREF | 使能HTML格式输出,并包含基本http链接地址。 |
-T title | 在HTML格式输出中,设置标题和H1标签头 |
--nolinks | 在HTML格式输出中,不输出超链接。 |