一、tree命令简介
tree命令是一个用于显示目录结构的命令。它可以以树状图的形式展示指定目录下的所有文件和子目录。这个命令并不是很常用,但是在我们统计某个目录下的目录结构还是非常有用的,如果我们需要完整的复制某个目录的目录结构,但是不负责目录下的文件的时候就需要使用到这个命令。
二、tree命令使用示例
1、查看命令版本
[root@s152 ~]# tree --version
tree v1.6.0 © 1996 - 2011 by Steve Baker, Thomas Moore, Francesc Rocher, Kyosuke Tokoro
2、获取命令帮助
[root@s152 ~]# tree --help
3、查看目录test目录结构
[root@s152 ~]# tree test
test
├── level1-1
│ ├── level2-1
│ ├── level2-2
│ └── level2-3
├── level1-2
│ ├── level2-1
│ ├── level2-2
│ └── level2-3
└── level1-3
├── level2-1
├── level2-2
└── level2-3
12 directories, 0 files
4、仅显示目录完整路径
如果我们需要递归获取目录下的整个目录结构,就可以使用如下命令,-f表示打印完整路径;-d表示只打印目录,不打印文件;-i表示省略前面的横线。
[root@s152 ~]# tree -fid test
test
test/level1-1
test/level1-1/level2-1
…
test/level1-3/level2-3
12 directories
5、不打印统计信息
[root@s152 ~]# tree --noreport test
test
├── a.txt
├── level1-1
│ ├── bb.txt
│ ├── level2-1
│ ├── level2-2
│ │ └── ccc.txt
│ └── level2-3
…
6、打印inode信息
inodes参数可以用于打印文件和目录的inodes编号,inodes编号一般用于文件名显示乱码的情况下删除文件使用。可以使用命令#find -inum inodes_number -delete 命令删除乱码文件。
[root@s152 ~]# tree --inodes test
test
├── [8576899] a.txt
├── [16851797] level1-1
│ ├── [16878307] bb.txt
│ ├── [25166001] level2-1
│ ├── [ 303089] level2-2
│ │ └── [ 323552] ccc.txt
│ └── [8422822] level2-3
…
12 directories, 3 files
7、打印时过滤空目录
[root@s152 ~]# tree --prune test
8、打印展示时打印文件属性、属主、属组
9、先打印目录后打印文件
[root@s152 ~]# tree --dirsfirst test
test
├── level1-1
│ ├── level2-1
│ ├── level2-2
│ │ └── ccc.txt
│ ├── level2-3
│ └── bb.txt
├── level1-2
…
12 directories, 3 files
三、使用语法及常用参数说明
1、使用语法
#tree [选项] [目录]
#tree [选项] [目录] -o filename
2、展示参数说明
如下表格中的
参数 | 参数说明 |
---|---|
-a | 列出所有文件。 |
-d | 仅列出目录。 |
-l | 遵循像目录这样的符号链接。 |
-f | 打印每个文件的完整路径前缀。 |
-x | 仅停留在当前文件系统上。 |
-L level | 仅向下级别目录深。 |
-R | 达到最大目录级别时重新运行树。 |
-P pattern | 只列出那些与给定模式匹配的文件。 |
-I pattern | 不列出与给定模式匹配的文件。 |
--noreport | 关闭树列表末尾的文件/目录计数。 |
--charset X | 将charset X用于终端/HTML和缩进行输出。 |
--filelimit # | 目录中的文件数不要超过#。 |
--timefmt | 根据<f>格式打印和格式化时间。 |
-o filename | 输出到文件而不是stdout。 |
--du | 打印目录大小。 |
--prune | 从输出中删除空目录。 |
3、文件参数说明
参数 | 参数说明 |
---|---|
-q | 将不可打印的字符打印为“?”。 |
-N | 按原样打印不可打印的字符。 |
-Q | 用双引号引用文件名。 |
-p | 打印每个文件的保护。 |
-u | 显示文件所有者或UID编号。 |
-g | 显示文件组所有者或GID编号。 |
-s | 打印每个文件的大小(以字节为单位)。 |
-h | 以更便于阅读的方式打印尺寸。 |
--si | 类似-h,但使用国际单位制(1000的幂)。 |
-D | 打印上次修改或(-c)状态更改的日期。 |
-F | 根据ls-F追加“/”、“=”、“*”、“@”、“ |
--inodes | 打印每个文件的inode编号。 |
--device | 打印每个文件所属的设备ID号。 |
4、排序参数说明
参数 | 参数说明 |
---|---|
-v | 按版本对文件进行字母数字排序。 |
-r | 按字母数字的相反顺序对文件进行排序。 |
-t | 按上次修改时间对文件进行排序。 |
-c | 按上次状态更改时间对文件进行排序。 |
-U | 保持文件未排序。 |
--dirsfirst | 在文件之前列出目录(-U禁用)。 |
5、图形选项参数说明
参数 | 参数说明 |
---|---|
-i | 不打印缩进线。 |
-A | 打印ANSI线条图形缩进线条。 |
-S | 使用ASCII图形缩进线打印。 |
-n | 始终关闭着色(-C覆盖)。 |
-C | 始终启用着色。 |
6、XML/HTML选项参数说明
参数 | 参数说明 |
---|---|
-X | 打印树的XML表示形式。 |
-H baseHREF | 打印出以baseHREF为顶部目录的HTML格式。 |
-T字符串 | 用字符串替换默认的HTML标题和H1标题。 |
--nolinks | 关闭HTML输出中的超链接。 |
四、基于tree命令复制目录结构实践
假设某系统完成集成测试,需要上线部署到生产环境。该系统有一个用于存储文件的大目录,下面包含子目录若干,测试期间产生了大量数据,总数据量超过了5个G。生产环境部署只需要存储文件的目录结构,不需要里面存储的测试文件,这个时候怎么办?这里我们将介绍使用tree命令编写脚本实现此需求。
- 查看此文件夹大小
[root@s152 data]# du -sh *
- 复制目录结构到文本文档
[root@s152 data]# tree -fid --noreport datafiles -o datafiles.txt
- 将文本文档拷贝到生产服务器待存储目录路径下
[root@s152 data]# scp datafiles.txt 192.168.0.152:/tmp/
#这里只是模拟测试,将IP地址改为你真是需要拷贝到的主机和目录下即可。
- 使用mkdir -p命令创建目录
[root@s152 tmp]# mkdir -p
cat datafiles.txt
- 对比目录数量
[root@s152 tmp]# tree /tmp/datafiles |grep directories
235 directories, 0 files
[root@s152 tmp]# tree /data/datafiles |grep directories
235 directories, 3138 files