侧边栏壁纸
  • 累计撰写 26 篇文章
  • 累计创建 37 个标签
  • 累计收到 6 条评论

目 录CONTENT

文章目录

linux命令—tree

Jhl
Jhl
2025-06-16 / 0 评论 / 0 点赞 / 7 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

命令简介

tree 是一个实用的 Linux 目录列表工具,以树形结构递归显示文件和目录,直观展示层级关系。它支持自定义过滤、排序、输出格式等功能,是管理文件系统的利器。

安装tree

大多数 Linux 系统默认未安装 tree,需手动安装:

#Debian/Ubuntu
sudo apt install tree
#debian:https://mirrors.aliyun.com/debian/pool/main/t/tree/
#Ubuntu:https://mirrors.aliyun.com/ubuntu/pool/universe/t/tree

#RedHat/CentOS
sudo yum install tree
#可以使用wget命令根据rpm地址下载后安装
#rhel7/centos7:https://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm
#rhel8/centos8:https://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/x86_64/os/Packages/tree-1.7.0-15.el8.x86_64.rpm
#rhel9/centos stream9:https://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/Packages/tree-1.8.0-10.el9.x86_64.rpm

#Arch/Manjaro
sudo pacman -S tree
#Manjaro:https://mirrors.aliyun.com/manjaro/pool/sync/tree-2.2.1-1-x86_64.pkg.tar.zst
#Arch:https://mirrors.aliyun.com/archlinux/pool/packages/tree-2.2.1-1-x86_64.pkg.tar.zst

用法

tree命令的语法格式如下

tree [选项] [目标目录]
#选项可选
#目标目录可选

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        #打印使用帮助信息
--            #选项处理终止符

命令案例场景

1.基础用法

显示当前目录的树状结构

[root@blog ~]# tree
.
├── anaconda-ks.cfg
├── dir1
│   ├── file1.txt
│   └── subdir
└── dir2
    └── report.pdf

3 directories, 2 files

显示指定目录的结构

[root@blog ~]# tree /var/log/
/var/log/
├── anaconda
│   ├── anaconda.log
│   ├── dbus.log
│   ├── lvm.log
│   ├── packaging.log
│   ├── program.log
├── audit
│   └── audit.log
├── boot.log
├── btmp
├── chrony
├── vmware-vmusr-root.log
└── wtmp

3 directories, 10 files

2.核心参数应用场景

层级控制(-L)

[root@blog ~]# tree -L 1 #仅显示1级目录
.
├── anaconda-ks.cfg
├── dir1
└── dir2

2 directories, 1 files

隐藏文件显示(-a)

[root@blog ~]# tree -a #显示以.开头的隐藏文件
.
├── anaconda-ks.cfg
├── .bash_history
├── .bash_logout
├── .bash_profile
├── .bashrc
├── .cache
├── .config
├── .cshrc
├── dir1
│   ├── file1.txt
│   └── subdir
├── dir2
│   └── report.pdf
├── .local
│   ├── share
│   └── state
├── .ssh
├── .tcshrc
└── .Xauthority

9 directories, 9 files

仅显示目录及子目录(-d)

[root@blog ~]# tree -d
.
├── dir1
│   └── subdir
└── dir2

3 directories

显示文件权限、所有者和所有组(-p、-u、-g)

[root@blog ~]# tree -p -u -g #或使用tree -pug
.
├── [-rw------- root     root    ]  anaconda-ks.cfg
├── [drwxr-xr-x root     root    ]  dir1
│   ├── [-rw-r--r-- root     root    ]  file1.txt
│   └── [drwxr-xr-x root     root    ]  subdir
└── [drwxr-xr-x root     root    ]  dir2
    └── [-rw-r--r-- root     root    ]  report.pdf

3 directories, 2 files

完整路径显示(-f)

[root@blog ~]# tree -f
/root
├── /root/anaconda-ks.cfg
├── /root/dir1
│   ├── /root/dir1/file1.txt
│   └── /root/dir1/subdir
└── /root/dir2
    └── /root/dir2/report.pdf

3 directories, 3 files
#以上案例全部是在/root目录下操作,没有写目录名,则用.代表当前文件夹

排除过滤(-I)

[root@blog ~]# tree -I "subdir|*.pdf" #排除subdir和.pdf文件
.
├── anaconda-ks.cfg
├── dir1
│   └── file1.txt
└── dir2

2 directories, 2 files

输出重定向(-o)

[root@blog ~]# tree -o structure.txt #将结果保存到文件

#验证
[root@blog ~]# cat structure.txt
.
├── anaconda-ks.cfg
├── dir1
│   ├── file1.txt
│   └── subdir
├── dir2
│   └── report.pdf
└── structure.txt

3 directories, 4 files

按照更改时间排序(-t)

[root@blog ~]# tree -t #最新修改的文件排在最后
.
├── anaconda-ks.cfg
├── dir1
│   ├── subdir
│   └── file1.txt
├── dir2
│   └── report.pdf
└── structure.txt

3 directories, 4 files

以易读的格式输出文件目录(-h)

[root@blog ~]# tree -h
.
├── [ 1.5K]  anaconda-ks.cfg
├── [   37]  dir1
│   ├── [    0]  file1.txt
│   └── [    6]  subdir
├── [   24]  dir2
│   └── [    0]  report.pdf
└── [  469]  structure.txt

3 directories, 4 files

生成JSON格式列表(-J)

[root@blog ~]# tree -J
[{"type":"directory","name": ".","contents":[
  {"type":"file","name":"anaconda-ks.cfg"},
  {"type":"directory","name":"dir1","contents":[
    {"type":"file","name":"file1.txt"},
    {"type":"directory","name":"subdir","contents":[
    ]}
  ]},
  {"type":"directory","name":"dir2","contents":[
    {"type":"file","name":"report.pdf"}
  ]},
  {"type":"file","name":"structure.txt"}
]},
  {"type":"report","directories":3,"files":4}
]

3.进阶应用场景

磁盘空间分析

[root@blog ~]# tree --du -h #显示目录磁盘使用情况
.
├── [ 1.5K]  anaconda-ks.cfg
├── [   43]  dir1
│   ├── [    0]  file1.txt
│   └── [    6]  subdir
├── [   24]  dir2
│   └── [    0]  report.pdf
└── [  469]  structure.txt

  6.0K used in 3 directories, 4 files

结合grep过滤内容

[root@blog ~]# tree -f /root | grep txt #筛选含txt的路径
│   ├── /root/dir1/file1.txt
└── /root/structure.txt

快速定位大文件

[root@blog ~]# tree -if /boot | grep -E '.*\.[a-zA-Z0-9]{3,}$' | xargs du -h | sort -rh | head -n 10 #使用正则过滤扩展名至少3字符的文件
183M    /boot/initramfs-0-rescue-c7b614f13cae4850bfc895f5f2c2917a.img
59M     /boot/initramfs-5.14.0-570.12.1.el9_6.x86_64.img
2.5M    /boot/efi/EFI/redhat/grubx64.efi
2.3M    /boot/grub2/fonts/unicode.pf2
940K    /boot/efi/EFI/redhat/shimx64-redhat.efi
940K    /boot/efi/EFI/redhat/shimx64.efi
940K    /boot/efi/EFI/redhat/shim.efi
940K    /boot/efi/EFI/BOOT/BOOTX64.EFI
840K    /boot/efi/EFI/redhat/mmx64.efi
92K     /boot/efi/EFI/BOOT/fbx64.efi

生成网站目录结构图

[root@blog ~]# tree -H /root -o site_map.html --charset utf-8

需要将html下载本地,使用浏览器打开效果如下图

注意事项

  1. 善用Tab键补全: 输入路径时,按Tab键可以让系统自动补全目录名或文件名,避免拼写错误并提高效率。

  2. 超大目录建议配合-L参数限制遍历层数

  3. 在脚本中使用时建议添加--noreport参数禁用统计信息

  4. 使用 tree | grep "files"可以显示文件总数,输出末尾会统计

  5. 通过man tree查看完整手册

0

评论区