Linux 目录树
在开始之前,先理解一下 Linux 的目录树结构,它是一个倒置的树形结构,所有东西都从根目录 开始。

- : 根目录,一切的开始。
/home: 用户的主目录。/etc: 系统的配置文件。/var: 经常变化的文件,如日志、缓存。/tmp: 临时文件。/usr: 用户安装的程序和文件。
tree - 最直观、最常用的树形结构查看器
tree 命令以树状图的形式递归地显示目录内容,非常直观,是日常工作中最常用的工具。
安装
tree 命令通常不默认预装,需要手动安装。
-
在 Debian/Ubuntu 系统上:
sudo apt update sudo apt install tree
-
在 CentOS/RHEL/Fedora 系统上:
(图片来源网络,侵删)sudo yum install tree # 或者对于较新的系统 sudo dnf install tree
基本用法
-
查看当前目录的树状结构 在任意目录下运行:
tree
示例输出:
. ├── dir1 │ ├── file1.txt │ └── file2.log ├── dir2 │ └── subdir │ └── image.png └── script.sh 3 directories, 4 files -
查看指定目录的树状结构
tree /var/log
-
限制递归深度 使用
-L选项可以限制显示的目录层级。
(图片来源网络,侵删)# 只显示当前目录和下一级子目录 tree -L 2
示例输出:
. ├── dir1 │ ├── file1.txt │ └── file2.log ├── dir2 │ └── subdir └── script.sh 3 directories, 4 files -
只显示目录 使用
-d选项可以只显示目录,不显示文件。tree -d
-
排除特定目录或文件 使用
-I选项可以排除匹配特定模式的文件或目录(类似grep -v)。# 排除所有 .log 文件 tree -I "*.log" # 排名为 'tmp' 的目录 tree -I "tmp"
-
显示文件大小 使用
-h选项可以以人类可读的方式(如 K, M, G)显示文件大小。tree -h
find - 最强大、最灵活的文件查找工具
find 的主要功能是查找文件,但它也可以用来生成目录树,它比 tree 更灵活,因为可以基于各种条件(如文件名、大小、修改时间、权限等)来查找,然后对找到的文件执行操作。
基本用法
-
find+ls生成类树状结构find命令本身不生成树状图,但可以结合其他命令实现,一个经典的方法是使用-printf选项(GNUfind特有)。find . -type d -printf "%h\n" | sort -u | sed 's|[^/]*/| |g'
find . -type d: 查找所有类型为目录的文件。-printf "%h\n": 打印每个目录的父目录路径。%h代表路径的父部分。sort -u: 对结果进行排序并去除重复项。sed 's|[^/]*/| |g': 用两个空格替换路径中的每一级目录,形成缩进效果。
-
find+exec/-execdir进行操作find的真正威力在于可以对找到的文件执行操作。# 查找所有 .txt 文件并删除它们 find . -type f -name "*.txt" -exec rm {} \; # 查找所有权限为 777 的文件并修改权限 find . -type f -perm 777 -exec chmod 644 {} \; # 查找过去 7 天内修改过的文件并列表 find . -type f -mtime -7 -ls
ls + grep + sed - 纯 Shell 命令组合(无需安装)
如果你没有 tree 命令,或者想在脚本中使用更轻量的方法,可以通过组合 ls, grep, 和 sed 来实现。
基本用法
这是一个非常巧妙的单行命令,可以生成一个简单的目录树:
ls -F | grep / | sed 's|/||' | while read dir; do echo "├─ $dir"; ls -F "$dir" | grep / | sed 's|/||' | sed 's|^|│ |'; done
ls -F: 在目录名后加上 。grep /: 筛选出目录。sed 's|/||': 去掉目录名末尾的 。while read dir; ... done: 循环处理每个目录。echo "├─ $dir": 打印带前缀的目录名。ls -F "$dir" | ...: 对子目录重复同样的操作,并用sed 's|^|│ |'添加缩进和竖线。
这个命令比较复杂,可读性差,但展示了 Shell 命令组合的强大能力。
pytree - Python 实现的替代品
pytree 是一个用 Python 写的 tree 命令替代品,功能与 tree 类似,但通常在需要 Python 环境的系统上可用。
基本用法
# 显示当前目录 pytree # 指定目录 pytree /path/to/directory # 限制深度 pytree -L 2
ls - 最基础、最通用的目录列表工具
虽然 ls 不直接生成树状图,但它是所有文件系统操作的基础,熟练掌握 ls 的各种选项至关重要。
常用选项
ls -F: 在文件名后添加指示符( 表示目录, 表示可执行文件, 表示符号链接)。ls -R或ls --recursive: 递归列出目录内容,效果类似于一个扁平化的树状结构。# 输出会很长,因为它会把所有子目录的内容都列在父目录下面 ls -R
ls -l或ls -la: 以长格式列出文件,包含权限、所有者、大小、修改时间等详细信息。ls -h或ls -lh: 与-l结合使用,以人类可读的方式显示文件大小。
总结与对比
| 命令/工具 | 主要特点 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
tree |
专用树形查看器,直观易用 | 输出最直观,选项简单,功能够用 | 需要额外安装 | 日常查看目录结构,快速了解项目文件组织 |
find |
强大的文件查找工具,功能极其丰富 | 灵活性最高,可基于任意条件查找和操作 | 语法复杂,主要用于查找而非直观展示 | 按条件查找文件,并对结果执行批量操作 |
ls 组合 |
纯 Shell 命令,无需安装 | 系统自带,轻量级 | 命令复杂,可读性差,不易维护 | 无 tree 命令时的应急方案,或在 Shell 脚本中快速实现 |
pytree |
Python 实现的 tree |
与 tree 功能类似 |
依赖 Python 环境 | 已有 Python 环境的系统,或需要特定 Python 扩展功能时 |
推荐工作流
- 快速浏览目录结构:使用
tree,这是最常用、最高效的方式。 - 查找特定文件或按条件处理文件:使用
find,这是最强大、最灵活的方式。 - 查看单个目录的详细信息:使用
ls -lh。 - 在脚本中或没有
tree的环境中:使用ls组合命令或尝试用find模拟。
希望这份详细的指南能帮助你更好地理解和使用 Linux 的目录树命令!
