为什么要导出目录结构
交接、评审、排障时附一份目录结构清单,比截图或口头描述清楚得多。tree 用 -L 限制深度、-I 排除依赖与产物目录,把结果重定向成文件;机器上没装 tree 时用 find -maxdepth 配合 -not -path 兜底。关键在于控制信噪比:不做深度限制的完整结构在真实项目里动辄上万行,没人会看,也容易泄露不该外传的目录名。
基本信息
| 适用平台 | Linux/macOS(tree 需要安装,包名通常就是 tree) |
|---|---|
| 权限要求 | 普通用户;无读权限的目录会输出提示 |
| 常用选项 | -L 深度、-I 排除模式、-d 只列目录、-a 含隐藏、--noreport 不打印统计 |
| 兜底方案 | find 路径 -maxdepth N -not -path 模式 |
| 搭配建议 | 配合 du --max-depth=1 附上各目录占用体积 |
典型使用场景
- 项目或数据目录交接时附结构清单
- 评审时说明部署目录布局与各目录职责
- 排查文件组织问题:同名目录散落在多处
- 梳理备份与同步策略时确认要排除哪些目录
- 作为交付文档或工单的附录贴出
常用示例
常用示例
tree -L 3 -I 'node_modules|.git|dist|venv' /data/app > structure.txt # 限深度并排除噪音目录
tree -L 2 -d /data/app # 只看目录层级,输出更短
tree -L 2 -a --noreport /etc/myapp > myapp-tree.txt # 含隐藏文件、不带末尾统计
# 没有 tree 时的等价写法:
find /data/app -maxdepth 3 -not -path '*/.git/*' -not -path '*/node_modules/*' | sort > structure.txt
du -h --max-depth=1 /data/app | sort -h # 附带一级目录占用,交接信息量更大
tree -L 2 /data/app | head -n 40 # 先看前若干行评估规模,再决定是否加深选项读法
| 选项 | 作用 | 注意 |
|---|---|---|
| -L N | 限制递归深度 | 先 -L 2 看规模,再决定是否加深 |
| -I 模式 | 排除匹配的目录或文件(竖线分隔多个) | 排除 .git、依赖与构建产物目录 |
| -d | 只列目录 | 关注组织结构时输出更短更清晰 |
| -a | 包含隐藏文件 | 敏感文件名会进清单,交付前必须过滤 |
| --noreport | 不输出末尾的统计行 | 粘贴进文档时更干净 |
| -l | 跟随软链接 | 链接多时可能输出爆炸,甚至遇到循环 |
tree 默认不跟随软链接(只显示链接本身),需要看链接指向内容时加 -l;目录里存在互相指向的链接时要特别小心,避免输出量失控。
清单里可能出现 .env、证书、密钥与备份文件名。对外交付或贴到工单前先自查一遍,必要时排除这些路径,避免把内部信息顺带泄露出去。