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

如何使用Unix删除名为“*”的文件?,unix,command-line,Unix,Command Line,我父亲刚刚给我讲了一个关于他的一个同事的故事,他几乎完成了他的论文,正乘飞机去丹麦和一个朋友讨论这个问题。他在电脑上玩,创建了一个名为*.tex的文件。当飞行接近尾声时,他想删除文件,所以他告诉Unix rm-rf'*.tex',无意中删除了他的论文。除了不创建名为*的文件之外,如何避免这种情况?只需通过添加前面的“\”来转义“*”。rm\*.tex可以完美地工作。此外,除非你真的确定自己在做什么,否则不要使用rm-rf r和f代表执行和强制。这意味着,如果您使用该命令以某个目录为目标,它将立即

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

只需通过添加前面的“\”来转义“*”。rm\*.tex可以完美地工作。此外,除非你真的确定自己在做什么,否则不要使用rm-rf

r和f代表执行和强制。这意味着,如果您使用该命令以某个目录为目标,它将立即不可恢复地删除该目录、其所有文件、所有子目录及其所有文件,依此类推,直到树的末尾

rm -i \*.tex
i是用于交互的;您可以对删除的每个文件说是或否;这是-rf的对立面。反斜杠阻止星号扩展,因此您应该只提供*.tex,而不是depose.tex。您可以在名称周围使用引号-在这种情况下,单引号或双引号将起作用。如果特殊字符是回勾号或美元符号,则需要单引号

如果您有点担心哪些文件名可能会被删除,那么使用交互模式可能会很有用。如果您使用rm-fr,您必须确保它将执行您想要的操作。如果您在正确的目录中,通配符将执行您期望的操作。如果您在运行它时以root用户身份登录,那么在点击return之前,您需要停止并三思;一个错误可能是致命的


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

您只需正确引用它。你自己试试这个:

$ 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

这则轶事结尾的问题是我如何避免这种情况

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

alias rm='rm -i'
这将确保每次删除文件时,都会询问您是否确定

当然,关于逃离“*”的所有其他答案都是有效的——但这是你的万全之策


不同的shell有稍微不同的语法-所以请看您需要什么…

减轻人为错误或硬件/软件故障对文件系统造成的损害的通常方法是有一个可靠的备份过程


然而,在飞机上执行备份并不是特别实用,但现在支持轻量级快照的ZFS和btrfs等写上拷贝文件系统正变得越来越流行,让一个守护进程处理常规快照本来可以挽救这篇论文。

我同意-rf是非常危险的。使用rm命令别名听起来是个好主意,直到您发现别名无效,并且您所依赖的别名实际上不是别名,并且文件被删除。别名“丢失”的方式有很多种。如果必须这样做,请使用命令名(如del)作为别名;那么,如果别名丢失,就不会发生危险的事情。@JonathanLeffler-你能举一个别名无效的例子吗?我同意,教自己总是使用del而不是rm增加了一层额外的保护——就像清除所有您关心的文件上的w位一样。。。使用备份一直都是,而且永远都是,合理的建议;您发现自己在一台机器上,在那里您可以使用ksh,因此您的.bashrc文件被ksh忽略。2你在别人的机器上;您尚未在计算机上安装.bashrc文件。在其他人的机器上有很多方法。突然间,如果我正在删除文件,我就不那么在乎了-提醒我不要让你靠近我工作的机器。我不介意把自己的东西弄乱;如果我把别人的东西弄糟了,这是一个严重的问题——非常严重。这就是为什么我要将我的论文置于版本控制之下,即git。