惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
L
LangChain Blog
H
Help Net Security
博客园_首页
T
Tailwind CSS Blog
Microsoft Security Blog
Microsoft Security Blog
T
The Blog of Author Tim Ferriss
雷峰网
雷峰网
Recent Announcements
Recent Announcements
D
DataBreaches.Net
U
Unit 42
Vercel News
Vercel News
I
InfoQ
Martin Fowler
Martin Fowler
Microsoft Azure Blog
Microsoft Azure Blog
Apple Machine Learning Research
Apple Machine Learning Research
S
SegmentFault 最新的问题
Jina AI
Jina AI
博客园 - 叶小钗
博客园 - 【当耐特】
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
Last Week in AI
Last Week in AI

张洪Heo

OpenClaw 接管你的油猴脚本:让 AI 直接读改网页脚本,不用再复制粘贴 为 iPhone Duo 做设计:苹果官方设计原则全解读 看到了淘宝闪购的AI评论,引发了我的思考 如何在网页插入 livephoto ?实况照片 PVT 在线生成、动态JPG生成工具与嵌入工具 MacBook不进入休眠全新邪修:十几块钱的绿联HDMI欺骗器 OpenClaw 2.0:稳定性提升不少,我还迁移了我的记忆系统 将你的 HeoID 卡片添加到 Apple 钱包 智谱codingplan耐用程度分析:只用 GLM-5.3-Flash 够不够用? 软路由内网穿透访问方案全链路教程:从 ZeroTier 到 Nginx 再到 certd 证书管理 BrowserSkill上手:让AI接入浏览器,还能录制动作教它学习 我与我的 OpenClaw 凉透了焦虑和解了 ntfsmac 上手:不关 SIP 让 Mac 读写 NTFS 和 ext 硬盘 个人小项目vibecoding方案推荐:opencode spark 1.2 和 zcode 分享一下博客的全新聚合搜索 给DeepSeek-V4-Flash借一双眼睛:ZCode视觉子Agent方案 Mole Mac 上手:界面精美,优秀好用的Mac清理工具 Agentation 油猴脚本:让AI指哪改哪,配合 Claude Code 的开发神器 洪绘压图网页版上线,这下可以随时随地在线压缩图片了 分享一下我最近制作的一些AI音乐,以及解决唱歌错字和音质的一些小技巧 洪绘敲木鱼支持“竹知了”模式了,可以自定义音效的电子竹知了App 洪绘烧纸:一个网页在线电子烧纸,电子祭祀工具 WebMCP适配教程:为浏览器AI预备好,让网页向 AI 提供工具,本博客已支持 报错回顾:给OpenClaw添加错误行为记忆机制,让自己写的skill不断成长 腾讯miora上手:设计师又又又失业的一集? Mac 合盖不休眠:用 pmset 彻底禁止系统睡眠 如何用 OpenClaw 配置早报晚报,科技新闻信源、微博热搜获取 给 SearXNG 接入豆包搜索,解决 OpenClaw 信源难题 OpenClaw记忆系统升级:从memory-core到memory-lancedb-pro的迁移与配置 screenpipe:开源本地的 AI 记忆引擎,让电脑更懂你 混元hy3模型上手:腾讯送了云函数个人版6个月,怎么才能用上
给OpenClaw加上rm删除保护:防止AI误删你的整个电脑
张洪Heo · 2026-07-07 · via 张洪Heo

这篇文章介绍了如何给OpenClaw加上rm删除保护,防止AI误删整个用户目录。起因是OpenClaw执行清理任务时跑了一行rm -rf ~/,导致用户主目录被递归删除。通过在.zshrc中定义rm函数实现两层防护:危险路径拦截和受保护目录精确匹配,同时所有递归删除自动转为trash废纸篓恢复。

本来一开始没想写这个文章,因为有点过于丢人了。但是我之前一直推荐大家用OpenClaw,我都翻车了还是本着负责任的态度说说。

之前有个事故,OpenClaw 在执行清理任务的时候跑了一行 rm -rf ~/,没加引号,Shell 直接把 ~ 展开成 /Users/zhheo/,然后整个用户目录就开始被递归删除。

玩梗的段子回旋镖来了

等我发现的时候,Desktop、Music、Pictures 这些文件夹已经没了。好在有极空间 NAS 的 Syncthing 同步,大部分文件恢复了回来,但那个心惊胆战的感觉是真的不好受。

所以这次我给 .zshrc 里的 rm 函数加了一层硬保护。

两层防护

第一层:危险路径拦截

不管你是 rm -rf ~/ 还是 rm -rf /Users/zhheo,只要目标是用户主目录,直接拦截不执行。Shell 展开 ~ 之后变成绝对路径,函数里有一份危险路径黑名单,命中就报错退出。

第二层:受保护目录

Desktop、Documents、Downloads、Music、Movies、Pictures、.ssh、.openclaw、.config 这些目录,rm -rf 直接拦截。精确匹配,rm -rf ~/Music 会被拦。

其他递归删除(比如 rm -rf ~/Music/some_folder)不会被拦截,但会自动转成 trash,文件进废纸篓可恢复。只有非递归的单文件删除才走系统原生 rm

怎么实现的

.zshrc 里定义了一个 rm() 函数,覆盖系统的 rm 命令。逻辑很简单:

1
2
3
4
5
6
7
rm() {





}

递归删除全部自动转 trash,文件进废纸篓还能恢复。只有非递归的 rm(比如删单个文件)才走系统原生命令。

测试结果

1
2
3
$ rm -rf ~/
🚫 危险操作已拦截:rm /Users/zhheo/
这会删除整个用户目录!
1
2
3
$ rm -rf ~/Music
🚫 受保护目录,禁止递归删除:/Users/zhheo/Music
如需删除请用 trash 命令手动操作

要加减保护目录的话随时说,改 .zshrc 就行。

把下面这段加到你的 ~/.zshrc 里就行(代码仅适用于mac,建议发给你的龙虾帮你添加代码,因为代码可能需要根据环境定制修改)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

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


local dangerous_paths=(
"/Users/zhheo"
"/Users/zhheo/"
"$HOME"
"$HOME/"
"/"
"/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
}

protected_dirs 里可以加你自己的目录,比如项目文件夹、数据库目录之类的。改完跑 source ~/.zshrc 就生效。

头像背景Guli形象

张洪Heo

分享设计与科技生活

本文使用AI辅助创作,采用 CC BY-NC-ND 4.0 协议,转载请注明出处。