如何使用Unix删除名为“*”的文件?

时间:2013-01-26 22:16:02

标签: unix command-line

我的父亲刚刚告诉我一个关于他的同事的故事,他几乎完成了他的论文,并且正乘飞机飞往丹麦与朋友讨论。他正在他的电脑上玩,并创建了一个名为“* .tex”的文件。当航班即将结束时,他想删除该文件,因此他告诉Unix rm -rf '*.tex',并意外删除了他的论文。除了不创建名为*的文件?

之外,我该如何避免这种情况

5 个答案:

答案 0 :(得分:5)

通过添加前面的'\'来逃避'*'。 rm \*.tex完美无缺。此外,除非您确定自己在做什么,否则永远不要rm -rf

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

答案 1 :(得分: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

答案 2 :(得分:1)

rm -i \*.tex

-i用于互动;你可以对每个被删除的文件说“是”或“否”;它是-rf的对立面。反斜杠可以防止星标被展开,因此您只能提供*.tex而不是thesis.tex。您可以在名称周围使用引号 - 在这种情况下,单引号或双引号将起作用。如果特殊字符是后退或美元符号,则需要单引号。

如果您对可能删除的文件名感到担忧,那么使用交互模式会很有用。如果你使用rm -fr,你必须确保它会做你想要的(你在正确的目录中,通配符将按你的意愿行事)。如果您在运行时以root身份登录,则需要在返回之前停止并三思而后行;一个错误可能是致命的。

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

答案 3 :(得分:0)

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

然而,在飞机上飞行时进行备份并不是特别实用,但现在像ZFS和支持轻量级快照的btrfs这样的写时复制文件系统越来越受欢迎,让守护程序处理常规快照会保存论文。

答案 4 :(得分:-1)

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

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

alias rm='rm -i'

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

当然,关于逃避'*'的所有其他答案都是有效的 - 但这是你的“肯定会抓住所有”技巧。

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