一次"钻牛角尖"的 Linux 实践:清空目录,到底该用 `rm -rf /*` 还是 `find ... -exec rm -rf {} +`?

目录 ⚠️ 先看安全警告 一、最朴素的写法:rm -rf /root/* 二、先分清:-maxdepth 限制的是 find,不是 rm 三、-delete:另一种清空方式,但差别不小 四、我踩的最大一个坑:想用 grep 过滤 find 的结果 为什么会错? xargs 本身也不安全 五、怎样真正地"反选隐藏项”? 六、find ... ! -name '.*' -exec rm -rf {} + 和 rm -rf /root/* 到底啥区别 七、再进一步:去掉 -maxdepth 1 会怎样? 八、又一个"看起来很聪明"的写法:ls -a | grep -vE '^\.+' | xargs rm -rf 问题一(致命):ls 输出的是"显示名",不是"可操作的路径" 问题二:grep -vE '^\.+' 排除的是所有隐藏项,不只是 . 和 .. 问题三:xargs 默认按空白拆分,文件名有空格就出事 问题四:以 - 开头的文件名会被 rm 当成选项 正确写法对比 九、我最后总结出的两套安全写法 1. 清空目录下所有内容(含隐藏项),保留目录本身 2. 只清除非隐藏内容,保留第一层隐藏项 十、我算不算钻牛角尖? 十一、关于"培训课为什么不讲这个" 总结 起因很简单:我想把 /root 目录里的东西清空,但保留 /root 本身。 结果一路从 rm -rf 研究到 find 的 -mindepth、-maxdepth、-delete,还踩了个"用 grep 过滤文件名"的大坑。 这篇文章就是这次探究的完整记录。 ...

September 28, 2026 · 6 分钟 · 1152 字

grep 的引号、反斜杠与正则方言:一次讲清我踩过的坑

目录 1. 问题背景 1.1 先准备一份测试数据 1.2 第一条命令 2. 先记住一件事:你敲的字符,要过两道关卡 3. 疑惑一:引号加不加、加哪种,到底有没有区别 3.1 简单字符串:结果一样,但原因值得知道 3.2 包含空格:Shell 会把一个参数切成两个 3.3 包含通配符:Shell 会先把 *.txt 展开 3.4 包含变量 $:双引号会展开,单引号不会 3.5 三种写法小结 4. 疑惑二:/example/ 在 grep 里为什么不好使 4.1 现象 4.2 原因:/ 不是 grep 的定界符 4.3 顺带踩的大坑:命令敲下去"没反应" 4.4 续行符:\ 放在什么位置才不翻车 5. 疑惑三:都是反斜杠,为什么有的匹配有的不匹配 5.1 三方对照表 5.2 三条核心原则 6. 疑惑四:+ 在 BRE 和 ERE 里完全是两回事 6.1 打开 ERE 的开关是 -E 6.2 \d 为什么用不了:这是 -P 的事 7. 疑惑五:为什么两条不同的命令,结果一模一样 7.1 先看一个坑:字符集 [example]+ 7.2 分组 (example)+ 和字面量 example 7.3 照妖镜 -o:把藏起来的差别照出来 8. 疑惑六:grep -w 和 \b 是一回事吗 9. 疑惑七:grep 和 awk 的边界在哪 10. 总结与速查表 摘要:这篇文章记录我复习 Linux grep 时踩过的一串坑:引号加不加到底有没有区别、反斜杠什么时候生效什么时候被吃掉、/example/ 为什么在 grep 里不好使、命令敲下去为什么"没反应",以及 BRE / ERE / PCRE 三套方言的区别。全文按「现象 → 原因 → 结论」组织,一共 7 个疑惑,末尾附一张速查表。 ...

September 13, 2026 · 8 分钟 · 1500 字
本站访客 · 访问量