0

我父亲刚刚给我讲了一个关于他的一个同事的故事,他的论文几乎完成了,正乘飞机飞往丹麦和一个朋友讨论这个问题。他在他的电脑上玩耍,并创建了一个名为“*.tex”的文件。当飞行接近尾声时,他想删除文件,所以他告诉 Unix rm -rf '*.tex',并意外删除了他的论文。除了不创建名为的文件之外,我如何避免这种情况*

4

5 回答 5

5

只需通过添加前面的 '\' 来转义 '*'。rm \*.tex完美运行。此外,rm -rf除非您真的确定自己在做什么,否则永远不要做任何事情。

r 和 f 代表 [r] 递归和 [f] 强制。这意味着,如果您使用该命令定位一个目录,它将立即且不可挽回地删除该目录、其所有文件、所有子目录及其所有文件,依此类推,直到树的末尾。

于 2013-01-26T22:19:16.560 回答
3

您只需要正确地单引号即可。自己试试这个:

$ mkdir tmp
$ cd tmp
# Create a file named '*.tex', containing the string 'foo'
$ echo 'foo' > '*.tex'
# Create a file named 'bar.tex', containing the string 'bar'
$ echo 'bar' > 'bar.tex'
$ ls
$ rm '*.tex'
$ ls
于 2013-01-26T22:19:57.957 回答
1
rm -i \*.tex

-i用于交互;您可以对每个删除的文件说是或否;它是 的对立面-rf。反斜杠防止星号被扩大,所以你应该只被提供*.tex而不是thesis.tex太多。您可以在名称周围使用引号 - 在这种情况下,单引号或双引号都可以。如果特殊字符是反引号或美元符号,则需要单引号。

如果您有点担心可能会删除哪些文件名,那么使用交互模式会很有用。如果您使用rm -fr,则必须确保它会执行您想要的操作(您在正确的目录中,通配符会执行您期望的操作)。如果您在运行时以 root 身份登录,则需要停下来三思而后行,然后再按回车;一个错误可能是致命的。

我还会观察到,如果论文不受版本控制且没有备份,那么这位同事的生活就很危险。如果它很重要,请将其备份(并尽可能将其置于版本控制之下)。

于 2013-01-26T22:19:50.240 回答
0

减轻文件系统上的人为错误或硬件/软件故障损坏的常用方法是建立可靠的备份过程。

然而,在飞机上进行备份并不是特别实用,但现在像 ZFS 和 btrfs 等支持轻量级快照的写时复制文件系统越来越流行,拥有一个处理常规快照的守护进程本来可以挽救论文。

于 2013-01-27T09:27:47.420 回答
-1

轶事结尾的问题是“我该如何避免这种情况”。

如果您想避免意外删除文件,可以将rm命令别名如下(将此行添加到启动脚本中):

alias rm='rm -i'

这将确保每次删除文件时,都会询问您“您确定”吗?

当然,关于转义 '*' 的所有其他答案都是有效的——但这是你的“万无一失”的把戏。

不同的 shell 的语法略有不同 - 所以看看你需要什么......

于 2013-01-26T22:24:13.123 回答