文章目录
tree
命令在 Linux 和 Unix 系统中是一个非常有用的工具,它用于以树状图的形式递归地列出目录的内容。这对于快速查看目录结构非常有帮助
1、基本用法
在终端中,只需输入 tree
后跟上想要列出其内容的目录路径(如果不指定路径,则默认为当前目录)。例如:
bash
tree
#或者
tree [选项] [目录]
2、常见选项
功能
- 递归列出目录内容:
tree
会递归地列出指定目录及其所有子目录的内容。 - 可视化目录结构:通过树状图的形式,使得目录结构一目了然。
- 支持多种选项:通过不同的选项,可以控制输出的格式、深度等。
主要参数选项
-a
或--all-files
:显示所有文件,包括以点.
开头的隐藏文件。-d
:仅列出目录,不显示文件。-f
:在每个文件或目录前显示其完整路径。-i
或--inodes
:不显示文件或目录的链接信息。-L level
:限制目录显示的深度为指定的级别。-n
:直接以 ASCII 字符显示,而不是使用图形字符。-P pattern
:仅显示匹配指定模式的文件或目录。-p
:在每个文件或目录后显示其权限(以类似ls -l
的格式)。-s
:在每个文件或目录后显示其大小。-t
:按文件或目录的修改时间排序显示。-u
:显示文件和目录的拥有者。-v
:在列出每个目录时,显示其版本控制信息(如果可用)。--dirsfirst
:在列出文件之前先列出目录。--noreport
:不显示最后关于文件/目录总数的报告。--charset charset
:使用指定的字符集来显示非ASCII字符。
3、举例
-a 选项举例:
bash
# 列出当前目录及其所有子目录的内容(包括隐藏文件):
tree -a

-d 选项举例:
bash
# 仅列出目录,不显示文件,并限制深度为2:
tree -d -L 2

-L 选项举例:
bash
# -L level:限制树的深度,level 指定显示的层级深度
tree -L 2

-f 选项举例:
bash
# 显示文件和目录的完整路径。
tree -f

-i 选项举例:
bash
# 不使用树形结构(竖线),只显示缩进的文件列表
tree -i

-n 选项举例:
bash
# 不为文件和目录名着色(默认情况下,tree 会对不同类型的文件进行颜色编码)
tree -n

-F 选项举例:
bash
# 在每个目录后面添加 /,可执行文件后面添加 *,符号链接后面添加 @。
tree -F

-p 选项举例:
bash
# 显示文件和目录的权限。
tree -p

-s 选项举例:
bash
# 显示文件和目录的大小(以字节为单位)
tree -s

-t 选项举例:
bash
# 按修改时间排序,最近修改的文件和目录列在最前面。
tree -t

-r 选项举例:
bash
# 反转排序顺序。
tree -r

-l 选项举例:
bash
# 跟随符号链接,但不会进入符号链接指向的目录
tree -l

--du 选项举例:
bash
# 显示每个目录及其子目录的磁盘使用情况(类似于 du 命令)
tree --du

--timefmt format 选项举例:
bash
# 自定义显示时间的格式。可以与 -D 或 --time 选项结合使用
tree --timefmt "%Y-%m-%d %H:%M:%S" -D

-Q 选项举例:
bash
# 用引号引住文件和目录名称,适用于名称中包含特殊字符的情况
tree -Q

-P pattern 选项举例:
bash
# 只显示匹配指定模式的文件和目录。支持通配符如 *、?
tree -P "*.txt"

-I pattern 选项举例:
bash
# 忽略与指定模式匹配的文件和目录。也支持通配符
tree -I "*.txt"

--matchdirs 选项举例:
bash
# 与 -P 选项结合使用时,默认只匹配文件,使用此选项可同时匹配目录
tree -P "project*" --matchdirs

-o file 选项举例:
bash
# 将输出结果保存到指定文件,而不是打印到终端
tree -o output.txt

--noreport 选项举例:
bash
# 不显示文件和目录的总计信息
tree --noreport

--charset charset 选项举例:
bash
# 指定输出字符集如 ASCII、UTF-8 等
tree --charset ASCII

4、注意事项
注意tree命令是否存在
tree
命令可能不是所有 Linux 发行版的标准部分,如果系统中没有安装,你可以通过包管理器如 apt-get、yum 等来安装它
ubuntu操作系统中可以用如下命令来安装
bash
apt-get update
apt-get install -y tree

centos、redhat等操作系统中可以用如下命令来安装
bash
yum install -y tree

目录深度限制
- 如果要查看一个包含大量子目录的目录树,未使用
-L
选项限制深度可能会导致输出过长,难以阅读并且可能影响性能
输出文件处理
- 当将
tree
命令的输出重定向到文件时,确保你有足够的磁盘空间,特别是在处理大型目录树时。使用-o
选项将输出保存到文件时,要注意目标文件的大小
处理大目录
- 在包含大量文件和目录的目录结构中运行
tree
可能会非常耗时且占用大量内存。可以结合-L
选项或-P
、-I
选项来过滤输出,减少负载
符号链接的处理
- 使用
-l
选项跟随符号链接时要小心,特别是在符号链接可能导致循环引用的情况下。tree
默认不会跟随符号链接以避免这种问题,但如果使用了-l
选项,注意可能出现的循环或无休止的输出
字符编码
tree
输出使用的字符集可能在不同终端上表现不一致,特别是如果终端不支持某些字符集时。可以使用--charset
选项指定字符集,如ASCII
或UTF-8
,以确保输出的兼容性
输出的视觉效果
tree
默认输出会包含颜色编码和树形符号,这在终端中很有用,但可能不适合某些输出目的(如保存到文件或用于脚本)。可以使用-n
选项禁用颜色编码,或结合-i
选项只显示缩进而不使用树形结构
远程系统使用
- 在远程系统上使用
tree
时,考虑到网络延迟和带宽限制,尤其是在目录树非常大时,建议使用-L
或-P
选项限制输出,或将输出保存为文件后下载查看
