tree 命令用于以树状图形式递归列出目录的内容,它能直观地显示目录和文件的结构关系。tree命令不是所有Linux发行版默认安装的,但可以通过包管理器轻松安装。
sudo apt update
sudo apt install tree
sudo yum install tree
# 或者
sudo dnf install tree
tree [选项] [目录]
如果未指定目录,默认使用当前目录。
| 选项 | 说明 |
|---|---|
| -a | 显示所有文件和目录(包括隐藏文件) |
| -d | 只显示目录 |
| -f | 显示每个文件的完整路径 |
| -i | 不显示树状线条,仅列出文件 |
| -l | 跟随符号链接(像目录一样递归显示) |
| -p | 显示文件的权限(类似ls -l) |
| -u | 显示文件所有者 |
| -g | 显示文件所属组 |
| -s | 显示文件大小(字节) |
| -h | 以人类可读格式显示文件大小(K,M,G) |
| -D | 显示文件的最后修改时间 |
| -L 层级 | 限制显示的目录深度 |
| -P 模式 | 只显示符合模式的文件/目录 |
| -I 模式 | 排除符合模式的文件/目录 |
| -o 文件 | 将输出重定向到文件 |
| -H 基URL | 输出HTML格式,带超链接 |
| --help | 显示帮助信息 |
| --version | 显示版本信息 |
# 显示当前目录的树状结构
tree
.
├── dir1
│ ├── file1.txt
│ └── file2.txt
├── dir2
│ └── subdir
│ └── file3.txt
├── README.md
└── script.sh
3 directories, 4 files
# 显示/etc目录的结构(前两层)
tree -L 2 /etc
tree -a ~
tree -d /var/log
/var/log
├── apt
├── cups
├── installer
└── nginx
├── access.log
└── error.log
tree -pugh -h -D
.
├── [drwxr-xr-x root root 4.0K Oct 15 08:30] dir1
│ ├── [-rw-r--r-- user users 1.2K Oct 14 10:15] file1.txt
│ └── [-rw-r--r-- user users 234 Oct 14 10:16] file2.txt
└── [-rwxr-xr-x user users 980 Oct 15 09:00] script.sh
# 只显示.txt文件
tree -P "*.txt" .
# 排除.txt文件
tree -I "*.txt" .
# 排除多个模式
tree -I "*.txt|*.log" .
# 只显示包含"test"的目录/文件
tree -P "*test*" .
# 只显示2层深度
tree -L 2 /usr
# 显示完整路径(结合深度限制)
tree -f -L 2 /etc
# 输出到文件
tree -o directory_structure.txt
# 输出HTML格式
tree -H . -o index.html
# 输出带样式的HTML
tree -H . -C -o tree.html
# 仅显示统计信息,不显示树状图
tree -i
tree --filelimit 10 # 不显示包含超过10个文件的目录内容
# 结合grep过滤
tree -f | grep -E "\.(py|js|html)$"
# 统计不同类型的文件数量
tree -i | grep -c "\.txt$"
tree -i | grep -c "\.py$"
# 生成项目文档结构
tree -I "node_modules|.git|__pycache__" -o PROJECT_STRUCTURE.md
#!/bin/bash
# 备份前记录目录结构
BACKUP_DIR="/var/backups"
LOG_FILE="/var/log/backup_structure.log"
echo "=== 备份目录结构 $(date) ===" >> "$LOG_FILE"
tree -h -D "$BACKUP_DIR" >> "$LOG_FILE"
echo "" >> "$LOG_FILE"
# 检查特定目录大小
PROJECT_DIR="/home/user/project"
echo "项目目录结构及大小:"
tree -sh "$PROJECT_DIR" | head -20
#!/bin/bash
# 比较两个目录的结构差异
dir1="/path/to/dir1"
dir2="/path/to/dir2"
# 生成文件列表
tree -i -f "$dir1" | sort > /tmp/dir1_list.txt
tree -i -f "$dir2" | sort > /tmp/dir2_list.txt
# 比较差异
echo "只在dir1中存在的文件:"
comm -23 /tmp/dir1_list.txt /tmp/dir2_list.txt
echo "只在dir2中存在的文件:"
comm -13 /tmp/dir1_list.txt /tmp/dir2_list.txt
# 生成适合插入README.md的目录结构
echo "## 项目结构" > README.md
echo '```' >> README.md
tree -I ".git|node_modules|__pycache__|*.pyc|*.o" --dirsfirst >> README.md
echo '```' >> README.md
# 总是使用颜色
tree -C
# 不使用颜色
tree --noreport
# 自定义颜色方案(如果支持)
tree -C -A # 使用ANSI线条
tree -C -N # 不格式化输出,显示原始字符
tree命令可以通过环境变量和配置文件进行自定义:
# 设置tree的选项别名
alias tree='tree -C -h -I "*.pyc|__pycache__"'
# 在~/.bashrc中永久设置
echo 'alias tree="tree -C -h"' >> ~/.bashrc
# 配置文件位置(如果存在)
# /etc/tree.conf # 系统全局配置
# ~/.treerc # 用户配置
sudo apt install tree 或 sudo yum install tree-l 选项时要小心--filelimit 可以避免显示包含大量文件的目录内容-C 强制颜色输出