### [给 OpenClaw 加上 rm 删除保护:防止 AI 误删你的整个电脑](https://www.zuoshipin.com/article/2400) **Published:** 2026-07-14T10:24:51 **Author:** 17600879176 **Excerpt:** OpenClaw 这类本地 Agent 能执行终端命令,也可能误跑 rm -rf。本文保留源教程核心流程,整理 macOS zsh 下的 rm 删除保护函数、测试方法和 AI 工作流安全建议。 AI Agent 能帮我们跑命令、整理项目、清理文件,但它也可能把危险命令执行得非常干脆。源文记录了一个很典型的翻车场景:OpenClaw 在执行清理任务时跑出了 `rm -rf ~/`,Shell 会把 `~` 展开成当前用户目录,结果就变成了递归删除整个用户目录。 如果你也在使用 [**小龙虾 OpenClaw**](https://www.zuoshipin.com/link/916.html)、Claude Code、Codex CLI 或其他本地 Agent 工具,这篇教程很值得补上:给 `rm` 加一层保护,让危险删除先被拦截,普通递归删除则尽量转到废纸篓。 ![OpenClaw rm 删除保护封面](https://admin.zuoshipin.com/wp-content/uploads/2026/07/openclaw-rm-protect-cover.webp) OpenClaw rm 删除保护封面 **先说结论:**不要让 AI Agent 在没有保护的环境里自由执行 `rm -rf`。尤其是 `~/`、`$HOME`、`/Users/用户名`、`/` 这类路径,一旦展开后执行,后果可能非常直接。 ## 事故原因:一个没有引号的 rm 命令 源文里的问题出在这行命令: ``` rm -rf ~/ ``` 在 zsh/bash 里,`~` 会展开成当前用户目录。也就是说,它实际可能变成: ``` /Users/yourname/ ``` 如果 Agent 正在执行“清理文件”之类任务,又没有额外确认机制,就可能把 Desktop、Music、Pictures、Documents 等目录一起删掉。源文最后靠 NAS 同步恢复了大部分文件,但这种体验对任何创作者都不友好。 ![OpenClaw 执行清理任务时的误删风险截图](https://admin.zuoshipin.com/wp-content/uploads/2026/07/openclaw-rm-protect-accident.jpg) OpenClaw 执行清理任务时的误删风险截图 ## 两层防护思路 ### 第一层:危险路径直接拦截 不管输入的是 `rm -rf ~/`、`rm -rf $HOME`,还是展开后的 `rm -rf /Users/yourname`,只要目标命中用户主目录或系统关键路径,就直接报错退出。 ### 第二层:保护常用目录 对于 `Desktop`、`Documents`、`Downloads`、`Music`、`Movies`、`Pictures`、`.ssh`、`.openclaw`、`.config` 这类目录,递归删除也应该直接拦截。 **完善建议:**视频后期和 CG 用户可以把项目盘、素材盘、工程目录、数据库目录、同步盘目录也加入保护列表。AI Agent 能写文件是优势,但它不应该拥有“无保护删除一切”的权限。 ## 实现方式:在 .zshrc 里覆盖 rm 实现方式是在 `~/.zshrc` 里定义一个 `rm()` 函数,覆盖终端里的 `rm` 命令。它的逻辑可以理解为: ``` rm() { # 1. 解析参数,判断是否 -r/-R # 2. 检查目标路径是否在危险列表/保护目录里 # 3. 命中后报错退出 # 4. 没命中且是递归删除,自动转 trash # 5. 普通删除,正常走系统 rm } ``` 如果是递归删除,脚本会先检查危险路径和受保护目录;没命中时,不直接永久删除,而是调用 `trash` 把文件移入废纸篓。只有普通的单文件删除,才继续走系统原生 `rm`。 ## 完整代码:适用于 macOS zsh 把下面这段加入 `~/.zshrc`。注意先安装或确认系统里有 `trash` 命令;如果没有,可以通过 Homebrew 安装 `trash-cli` 或使用你习惯的废纸篓命令替代。 ``` # rm 安全函数:递归删除自动转 trash,危险路径直接拦截 rm() { local has_recursive=false local files=() for arg in "$@"; do case "$arg" in -r*|-R*) has_recursive=true ;; -f*|-i*|-v*|-I*) ;; --*) ;; -*) ;; *) files+=("$arg") ;; esac done # 保护目录列表:递归删除这些目录时直接拦截 local protected_dirs=( "$HOME/Desktop" "$HOME/Documents" "$HOME/Downloads" "$HOME/Music" "$HOME/Movies" "$HOME/Pictures" "$HOME/.ssh" "$HOME/.openclaw" "$HOME/.config" ) if $has_recursive; then for f in "${files[@]}"; do for pd in "${protected_dirs[@]}"; do if [[ "$f" == "$pd" || "$f" == "$pd/" ]]; then echo "危险操作已拦截:受保护目录,禁止递归删除:$f" >&2 echo "如需删除请用 trash 命令手动操作" >&2 return 1 fi done done fi # 危险路径拦截:按需把 /Users/yourname 改成自己的用户目录 local dangerous_paths=( "$HOME" "$HOME/" "/Users/yourname" "/Users/yourname/" "/" "/root" "/home" ) for f in "${files[@]}"; do for dp in "${dangerous_paths[@]}"; do if [[ "$f" == "$dp" || "$f" == "$dp/" ]]; then echo "危险操作已拦截:rm $f" >&2 echo "这可能删除整个用户目录或系统关键目录!" >&2 return 1 fi done done if $has_recursive; then for f in "${files[@]}"; do trash "$f" 2>/dev/null || echo "无法移到废纸篓:$f" >&2 done else command rm "$@" fi } ``` **重要:**代码里的 `/Users/yourname` 一定要改成你自己的用户目录,或者直接只保留 `$HOME`。修改 shell 配置前,建议先复制一份 `~/.zshrc` 备份。 ## 生效与测试 保存 `~/.zshrc` 后,执行: ``` source ~/.zshrc ``` 然后先做两组测试,不要一上来就在真实项目目录里试: ``` $ rm -rf ~/ 危险操作已拦截:rm /Users/yourname/ 这可能删除整个用户目录或系统关键目录! ``` ``` $ rm -rf ~/Music 危险操作已拦截:受保护目录,禁止递归删除:/Users/yourname/Music 如需删除请用 trash 命令手动操作 ``` ## 给 OpenClaw 用户的额外建议 - **把重要目录加入保护:**例如素材库、工程目录、客户文件夹、NAS 同步目录。 - **把危险命令加入审批:**涉及 `rm -rf`、`chmod -R`、`chown -R`、覆盖写入等操作时,尽量人工确认。 - **先 dry-run:**让 Agent 先列出将要删除的文件,不要直接执行删除。 - **保持备份:**Time Machine、NAS、云盘版本历史都很重要,AI 自动化越深入,备份越不能省。 **做视频网观点:**本地 Agent 的价值在于能真的操作电脑,但这也意味着它会继承终端命令的破坏力。给 `rm` 加保护不是小题大做,而是让 AI 工作流进入真实生产环境前必须补的一道保险。 ## 总结 这篇教程的核心不是“OpenClaw 不安全”,而是提醒我们:任何能执行本地命令的 AI Agent,都应该有文件保护机制。对于视频后期、CG、设计和开发工作流来说,素材和工程文件往往比软件本身更值钱。 如果你正在使用 [**OpenClaw**](https://www.zuoshipin.com/link/916.html) 这类本地 Agent,建议先把 `rm` 删除保护、项目备份、命令审批这三件事补上,再让 AI 承担更复杂的自动化任务。 **Tags:** AI Agent安全, macOS, OpenClaw, rm删除保护, Shell脚本, 终端安全 **Categories:** AI资讯 ---