一次"钻牛角尖"的 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 过滤文件名"的大坑。 这篇文章就是这次探究的完整记录。 ...