当前位置: 首页>>技术教程>>正文


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

,

问题描述

我无意中在我的主目录中创建了一个名为 -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.

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

最佳答案

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

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

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

    rm /home/you/directory/-r
    

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

    rm ./-r
    
  3. 使用 find

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

    或者,获取所有此类文件

    find . -name "-*" -exec rm {} \;
    
  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
    

次佳答案

在这种情况下,您必须在命令参数中使用 double-dash ( -- )。

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

所以输入 rm -- -r 你应该去掉这个文件。

第三种答案

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

rm ./-r

请参阅 rm 手册页:

To remove a file whose name starts with a ‘-‘, for example ‘-foo’, use one of these commands:

rm -- -foo  rm ./-foo 

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12301.html,未经允许,请勿转载。