问题描述
我无意中在我的主目录中创建了一个名为 -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
-
使用完整路径
rm /home/you/directory/-r
或者,从同一目录(您当前的目录称为
.
):rm ./-r
-
使用
find
find . -name "-r" -exec rm {} \;
或者,获取所有此类文件
find . -name "-*" -exec rm {} \;
-
使用丑陋的黑客。将所有内容移动到不同的目录(
-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