执行一条命令,把根目录给删了。

2015-11-22 20:46:57 +08:00
 yanw
我是在移动硬盘一个 fat32 分区里面( `cd /Volumes/fat32` ),想删除某个文件夹内以 "._" 开头的文件,然后就执行了以下命令:

sudo find . -name "._*" -exec rm -rf {} \;

等待的时间比较长,就想着去别的目录( `/data` )干点事,然后发现 `/data` 目录不见了!!然后 `cd /`,发现 `/` 也不见了!!

结果就是我用 time machine 恢复到昨天的版本了(今天 time machine 没跑)。

问题来了,这条命令出啥问题了?之前在 Linux 下用过这命令没问题啊。命令应该没输错,我是复制的。
3336 次点击
所在节点    macOS
24 条回复
xuyinan503
2015-11-22 21:05:41 +08:00
没找到 ._开头的文件,得到空

然后就执行了 rm -rf ?
crayygy
2015-11-22 21:33:13 +08:00
不要乱执行 rm -rf ,任何时候再执行这个操作的时候都应该三思
hicdn
2015-11-22 21:37:26 +08:00
批量删除一般都是 ls|find|grep 重定向 /tmp/xx.txt
确认一遍后再 cat /tmp/xx.txt|xargs rm -rf
Tiande
2015-11-22 21:41:14 +08:00
@hicdn 同意谨慎 rm
然而这条命令到底哪里错了?
wolfan
2015-11-22 21:47:32 +08:00
… 我好像一直在用这条命令删东西,到现在还没出过事真是感动啊😉
hicdn
2015-11-22 21:56:03 +08:00
@dtdnqsb 没发现哪里有错啊
v1024
2015-11-22 22:02:22 +08:00
骚年,用 trash 保平安。
cxh116
2015-11-22 22:11:44 +08:00
看命令本身没有问题. 有可能是 bsd 的命令行 bug.
碰到几次用 7z 解压 zip 出来乱码.然后用 ls grep xargs 等命令组合起来就是删除不掉.总是有字符转义问题.
有可能是你的要删除掉的文件名有一些特殊字符,最终某行被解析成 rm -rf /.

rm -rf 别乱用 sudo.更别乱 su - root 执行 rm -rf
yanw
2015-11-22 22:13:50 +08:00
@hicdn 新技能 Get ,感谢。

@crayygy 谨慎是对的, 3 楼的方法就很赞。

@dtdnqsb
@wolfan
@hicdn
@xuyinan503

不知道是不是因为在 fat32 分区下执行的命令?可是我在 fat32 下执行 find . -name "._*" 得到的文件确实是想得到的。

复制过来的命令是 sudo find / -name "._*" -exec rm -rf {} \; 我把 / 改成 . 了,难道是改错,改成 sudo find / -name "/*" -exec rm -rf {} \; 了?感觉犯这个错的可能性还是挺低的。
cxh116
2015-11-22 22:15:31 +08:00
@cxh116 可以在 mac 下运行这样的命令测试

cd /tmp/
touch "a b"
find . -name "a b"| xargs rm

报这样的错

rm: ./a: No such file or directory
rm: b: No such file or directory
yanw
2015-11-22 22:16:16 +08:00
@v1024 几百个文件以 "._" 开头,必须命令行操作的,不过 rm 操作改成 mv 操作倒是可行。
cxh116
2015-11-22 22:23:25 +08:00
@cxh116 测试了一下,linux 也有此问题.应该是用法不对,特殊字符需要加特殊参数对待.

http://stackoverflow.com/questions/16758525/use-xargs-with-filenames-containing-whitespaces
kn007
2015-11-22 22:23:52 +08:00
@yanw 我觉得 3 楼方法相对可靠
crayygy
2015-11-22 22:41:51 +08:00
其实 Adobe 才是真正的防 rm -rf 利器 :doge
lululau
2015-11-22 22:52:16 +08:00
用 find dir -other-opts -delete 代替 -exec rm {} \;
yanw
2015-11-22 23:13:10 +08:00
@crayygy 求解?
v1024
2015-11-22 23:40:06 +08:00
@yanw
我知道你在用命令行
brew install trash
JJaicmkmy
2015-11-22 23:44:57 +08:00
@yanw 因为 Adobe 是 A 开头,先被删,而且小文件很多,删除要很久。
iphone7166
2015-11-23 01:45:29 +08:00
find . -name "._" -print
确认后
find . -name "._*" -delete
WildCat
2015-11-23 08:40:53 +08:00
brew install trash
alias rm="You should use 'del' instead."
alias del="trash"

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/238094

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX