事情的经过是这样的:
我的一个rust 测试用例中需要创建目录。我写的目录是:“~/misc/data”
然后我在emacs的rustic-mode中用快捷键C-c C-c C-c执行当前的用例。这时候emacs就卡死了。
我在项目目录下发现了一个~目录,ls一看,是我的主目录中的内容。 感觉和奇怪。此时我就在项目目录下。
然后我想删除这个~目录。所以就执行了 rm -rf ~
这时就悲剧了。其实是在删除主目录。幸亏反应快,退出了。没删了多少东西。感觉当时脑子有点不太清楚。如果删的东西多,那系统就全废了,得花几天重装系统。
最后这样删除的: rm -rf project/~
5 个赞
个人电脑上我一般装个trash-cli用trash来做命令行的删除
3 个赞
clsty
7
终端里操作文件用某个 TUI 文件管理器最方便,包括 cd
ls
tree
什么的都省了。
如果你习惯用 TUI 文件管理器的话,应该很难发生这样的问题,比如 vifm 删文件是按 dd
放到回收站,按 DD
彻底删除,光标放在目标上即可。
上面有人说 dired 也是个方法。
1 个赞
我当时以为它把东西copy到了我这个项目目录下。其实当时如果执行 rm -rf ./~ 也没什么问题。
1 个赞
我没用过这些工具。执行程序需要在终端上,所以操作都顺便在这里作。
cireu
14
想起来我以前用虚拟机玩 LFS, 虚拟机里面编译很慢,编译最开始的 tools 工具链都花很长时间。有一次我编译完了,准备删除编译目录,用的 rm -rf ./*
,但是不小心多退了一层目录,把编译出来的工具链也删了
unix 除了 \0 和 / 之外都可以用来做路径名,别说 ~了, 甚至 *,$, :, . 啥的都可以用来做路径名,得多当点心。
1 个赞
所以为啥项目里会有个~目录?而且还是链接过来的home目录?
LdBeth
17
不是链接过来的,而是 ls ~
的时候实际上显示的就是 home,然后题主这时候没反应过来
1 个赞
不是链接。这是在emacs内部执行测试用例出了bug。不知道怎么弄出来的。估计和emacs 环境变量 主目录之类的 有关
guo
19
不带引号的 ~
会被bash 作为特殊字符解释,展开为$HOME
带引号的 "~"
会被作为文件名或目录名
1 个赞
这种特殊字符的,一般都是 ls,grep -v 去除其他的以后,再xargs 删除