无法删除名称类似命令参数的文件

我无意中在我的主目录中创建了一个名为-r的文件。 现在我无法摆脱它:

 rm -rf rm: missing operand Try 'rm --help' for more information. 

其他尝试:

 rm /-/r rm: cannot remove '/-/r': No such file or directory 

另一个:

 rm \-r rm: missing operand Try 'rm --help' for more information. 

有没有办法删除这个文件而不删除整个目录?

在这种情况下,您必须在命令参数中使用双短划线( -- )。

它的目的是告诉命令,不必将后面的内容作为命令的参数,而是简单的输入。 在rm的情况下,文件或目录名称。

所以输入rm -- -r你应该摆脱这个文件。

有很多方法可以做到这一点:

  1. 使用--表示选项标志的结束和许多程序(包括rm )的参数列表的开头。

     rm -- -r 
  2. 使用完整路径

     rm /home/you/directory/-r 

    或者,从同一目录(您当前的目录称为. ):

     rm ./-r 
  3. 使用find

     find . -name "-r" -exec rm {} \; 

    或者,获取所有这些文件

     find . -name "-*" -exec rm {} \; 
  4. 使用丑陋的黑客。 将所有内容移动到另一个目录(由于与rm相同的原因,这将导致-r文件失败)然后删除原始目录(将删除文件)并再次移回所有内容。 所以,假设你的-r文件在~/foo

     $ mkdir ~/bar $ for f in *; do mv "$f" ../bar/; done mv: invalid option -- 'r' Try 'mv --help' for more information. $ rm -rf ~/foo $ mkdir ~/foo && cd ~/foo $ mv ~/bar/* . $ rmdir ~/bar 

您还可以使用以下命令删除此类文件(以“ – ”开头):

 rm ./-r 

请参见rm手册页:

要删除名称以“ – ”开头的文件,例如“-foo”,请使用以下命令之一:

 rm -- -foo rm ./-foo 

或者您可以在rm命令中指定目录的完整路径,

例:

 rm -rf ~/Desktop/-r 

您也可以使用unlink命令(如果有的话),它不带任何选项,也可以使用单个参数。 因此, unlink -- -r将删除名为-r的文件