开发工具

tree-to-file.sh

一个托管在 helper.sh 的 Shell 脚本,适用于 Linux、macOS 和常见 Unix 环境,用来把经过过滤的目录树导出到文本文件。它优先使用系统自带的 tree;如果未安装,会根据当前环境尝试调用包管理器安装;如果安装仍不可行,则自动退回到内置的 find + awk 方案,但权限或文件系统错误仍可能导致失败。

先选对输出,再审阅可能泄露的名称

一键命令

curl -fL 'https://www.helper.sh/tree-to-file.sh' -o './tree-to-file.sh'

此命令只下载本站文件,不会执行。请先检查保存的源码并核对版本,再决定是否运行。

核对已下载文件

与本页面构建时内置的确切字节比较。文件只在当前标签页处理,此工具不上传、不持久化文件。上限 2 MiB。

预期 SHA-256
5abd1198eb756cd94316669022678802d59c1121f221cb879d6255259d47097d

内置文件字节数: 2797

保存校验文件

将脚本和校验文件保存在同一目录。Linux 安装 GNU Coreutils 后可用下方命令只检查字节,不运行脚本;使用此命令时需保留原文件名。

sha256sum --check './tree-to-file.sh.sha256'

尚未比较。

校验值与脚本来自同一网站,不是独立签名。一致不证明安全、上游依赖真实可信或适合本机;可变远程依赖需单独审阅。

查看验证与限制

运行要求

  • Linux、macOS 或常见 Unix Shell 环境
  • sh
  • find
  • sort
  • awk
  • 若需自动安装 tree,最好具备 sudo 或 root 权限

适用场景

  • 把项目结构导出到 tree.txt,用于提问、报错反馈或给 AI 提供上下文
  • 跳过 venv、node_modules 等大目录,生成更适合分享的目录概览
  • 在 Linux 和各类 Unix-like 主机上统一目录树导出方式

脚本亮点

  • 优先使用系统 tree,输出形式更符合常见习惯
  • 内置 brew、apt、dnf、yum、pacman、zypper、apk、pkg 等常见安装路径
  • 无法安装 tree 时尝试备用渲染;中间错误可能留下不完整清单,完成提示不证明成功

推荐流程

  1. 下载脚本,比对字节并审阅保存的源码,再决定是否运行。
  2. 核对当前扫描目录、tree是否可用及新的可写输出位置。
  3. 若tree缺失,先决定是否允许自动软件包变更;脚本没有禁止安装的开关。
  4. 经审阅运行后,检查标准错误、已知路径及输出中的敏感名称,再决定是否分享。

安全提示

  • 先下载、审阅和比对保存的脚本,再决定是否运行;远程内容通过管道送入sh会立即执行。
  • 自动安装 tree 可能需要 sudo 或 root,并且可能触发包索引刷新。
  • 内置回退逻辑按目录名精确忽略,不支持完整 shell glob 语法。

兼容范围与限制

  • 需要 sh;有 tree 时直接使用,否则可能通过检测到的包管理器以 root 或 sudo 自动安装。它不一定是只读盘点操作;没有禁止安装的参数或 dry-run。
  • 第一个参数为输出文件名(默认 tree.txt),第二个为忽略规则;扫描根目录是当前工作目录。输出文件会直接覆盖,没有备份。
  • find 回退需要 find、sort 和 awk;它在遍历后按路径组成部分精确匹配过滤,而 tree 使用自己的 -I 规则。通配符行为和输出格式可能不同。

受影响的文件、服务和数据

  • 可能刷新软件包元数据并安装 tree,可能触发 sudo 提示;软件包版本和仓库内容没有固定。
  • 写入所选输出文件并包含隐藏条目。回退流程会先遍历被忽略的目录再过滤名称;忽略规则不是访问控制边界。

只读核验

  • 执行前用 `command -v tree` 检查依赖、用 `pwd` 确认扫描目录,并检查目标输出文件是否已存在。
  • 经审阅运行后,检查输出文件中的预期目录、应排除路径、缺失内容及敏感名称再分享。完成提示本身不能证明清单完整。

失败后的下一步

遇到权限、包管理器或写入错误时,保留已有输出并检查报错。若不接受自动软件包变更,应先通过批准的流程单独安装 tree。确认工作目录并选择新的输出文件名;脚本没有备份或回滚。

先下载、审阅并核对版本,再决定是否执行。哈希只能标识这一版字节,不能证明安全。pipe 命令会立即执行远程内容;上游依赖也可能变化。

先选对输出,再审阅可能泄露的名称

这是源码审阅,不是文件系统扫描或导出通过的证明。沿用上方已有操作限制,下列实例帮助你在运行和分享前做具体判断。

两个位置参数的真实含义

扫描根目录始终是当前工作目录。第一个参数是输出文件名,不是源目录;第二个是忽略规则。空参数会使用默认值(tree.txt和内置忽略列表)。源码没有选项解析,不要把--help或--no-install当作已支持的开关;多余参数不能设置深度或扫描根目录。

Shell的 > 会在遍历前创建或截断输出,并可能跟随已有输出符号链接;渲染失败仍可能留下空的或不完整的替代文件。为避免把输出本身列入清单,选择扫描树之外、经核实的新输出位置,其父目录必须已存在且可写。这不会增加备份、防覆盖或原子写入能力。

决定运行前的只读检查

这些命令只显示当前目录和命令位置,不运行导出器、不安装软件、不验证权限或证明兼容。如果没有tree且不允许软件包变更,请停止;此脚本没有禁止安装的开关。

pwd
command -v tree
command -v find
command -v sort
command -v awk

过滤规则的具体差异

以下是源码/文档推导的示例,不是实测输出。“排除”只表示不显示,不代表禁止访问;备用分支仍会遍历被忽略目录。tree版本可能不同,请核对已安装版本的手册。

规则 / 示例路径tree分支find/awk备用分支
node* / node_modules/file.js通配符匹配,排除该名称字面量node*不等于node_modules,路径仍保留
.git / .git/config由-I排除路径组成部分完全相同,因此排除
内置默认规则 / .env不在默认排除列表内不在默认排除列表内

排除名为.gitignore的文件,不等于读取其中的规则;源码没有传入tree --gitignore。即使不导出文件内容,隐藏名称和符号链接目标也可能泄露私有信息,分享前请检查实际保存的名称。

为何完成提示不足以判断成功

备用分支在sh的set -eu下使用find | sort | awk,没有设置pipefail。以管道末尾命令状态为准的Shell中,find/sort报错后awk仍可能成功,随后显示“Wrote”。文件名含换行也会破坏逐行表示。请查看标准错误及已知路径;文件非空或退出码0都不能单独证明完整。保留不完整输出作为线索,私下诊断,不要盲目覆盖同一输出重跑。

tree上游手册 · GNU Bash · 查看导出审阅验证与限制

相关专题

CentOS 7:选择恢复任务

变更已结束支持的主机前,先区分仓库故障、SSH 访问问题和 Docker 存储压力。

查看专题