说一个事故.........

事情的经过是这样的:

我的一个rust 测试用例中需要创建目录。我写的目录是:“~/misc/data”

然后我在emacs的rustic-mode中用快捷键C-c C-c C-c执行当前的用例。这时候emacs就卡死了。

我在项目目录下发现了一个~目录,ls一看,是我的主目录中的内容。 感觉和奇怪。此时我就在项目目录下。

然后我想删除这个~目录。所以就执行了 rm -rf ~

这时就悲剧了。其实是在删除主目录。幸亏反应快,退出了。没删了多少东西。感觉当时脑子有点不太清楚。如果删的东西多,那系统就全废了,得花几天重装系统。

最后这样删除的: rm -rf project/~

5 个赞

你需要经历更大的风浪: rm -rf /

4 个赞

太经典了,我也遇到过几次

已经有教训了 rm -rf ‘~’

1 个赞

这时候都还没意识到问题在哪那心可真大

1 个赞

在dired看里面删最安全

2 个赞

个人电脑上我一般装个trash-cli用trash来做命令行的删除

3 个赞

终端里操作文件用某个 TUI 文件管理器最方便,包括 cd ls tree 什么的都省了。

如果你习惯用 TUI 文件管理器的话,应该很难发生这样的问题,比如 vifm 删文件是按 dd 放到回收站,按 DD 彻底删除,光标放在目标上即可。

上面有人说 dired 也是个方法。

1 个赞

这个我还没干过。

我当时以为它把东西copy到了我这个项目目录下。其实当时如果执行 rm -rf ./~ 也没什么问题。

1 个赞

这个看来我也可以试试

我没用过这些工具。执行程序需要在终端上,所以操作都顺便在这里作。

删除本目录的东西 我一般习惯加个./

1 个赞

是的。我平时也这么操作。但昨天不知道为啥短路了。

想起来我以前用虚拟机玩 LFS, 虚拟机里面编译很慢,编译最开始的 tools 工具链都花很长时间。有一次我编译完了,准备删除编译目录,用的 rm -rf ./*,但是不小心多退了一层目录,把编译出来的工具链也删了 :sob:

unix 除了 \0 和 / 之外都可以用来做路径名,别说 ~了, 甚至 *,$, :, . 啥的都可以用来做路径名,得多当点心。

1 个赞

所以为啥项目里会有个~目录?而且还是链接过来的home目录?

不是链接过来的,而是 ls ~ 的时候实际上显示的就是 home,然后题主这时候没反应过来

1 个赞

不是链接。这是在emacs内部执行测试用例出了bug。不知道怎么弄出来的。估计和emacs 环境变量 主目录之类的 有关

不带引号的 ~ 会被bash 作为特殊字符解释,展开为$HOME

带引号的 "~" 会被作为文件名或目录名

1 个赞

这种特殊字符的,一般都是 ls,grep -v 去除其他的以后,再xargs 删除