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

Jus*_*tin 21 command-line rm

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

rm -rf
rm: missing operand
Try 'rm --help' for more information.
Run Code Online (Sandbox Code Playgroud)

其他尝试:

rm /-/r
rm: cannot remove ‘/-/r’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

另一个:

rm \-r
rm: missing operand
Try 'rm --help' for more information.
Run Code Online (Sandbox Code Playgroud)

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

ter*_*don 45

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

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

    rm -- -r
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用完整路径

    rm /home/you/directory/-r
    
    Run Code Online (Sandbox Code Playgroud)

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

    rm ./-r
    
    Run Code Online (Sandbox Code Playgroud)
  3. find

    find . -name "-r" -exec rm {} \;
    
    Run Code Online (Sandbox Code Playgroud)

    或者,获取所有此类文件

    find . -name "-*" -exec rm {} \;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用丑陋的黑客。将所有内容移动到不同的目录(由于与-r此相同的原因,该文件将失败rm)然后删除原始目录(这将删除文件)并再次将所有内容移回。因此,假设您的-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
    
    Run Code Online (Sandbox Code Playgroud)


Ben*_*oit 26

在这种情况下,您必须--在命令参数中使用双破折号 ( )。

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

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


Syl*_*eau 8

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

rm ./-r
Run Code Online (Sandbox Code Playgroud)

请参阅 rm 手册页:

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

rm -- -foo

rm ./-foo
Run Code Online (Sandbox Code Playgroud)