我需要使用什么命令来删除名为-rf的文件?


67

我在某个时候做了疯狂的事情,创建了一个-rf在文件系统上调用的文件。
现在我不知道如何删除它...

我试过了:

rm "-rf"
rm \-rf

这些只是立即退出,哎呀!

有人知道如何删除此文件吗?最好不要意外地清除我的整个文件夹。


33
在不记得确切语法的情况下尝试从系统rm调用的文件有些紧张-rf
ChristopheD 2010年

3
解释为什么它们不起作用:引号和转义由您的shell(通常是bash)解析,然后将解析的结果传递到rm(在argc和中argv),因此,这两个结果都将数组["rm", "-rf"]传递给rm,可以满足您的期望。
塔纳托斯

3
我认为这更接近于Unix和Linux stackexchange的
副本

12
一种古老的作法是将一个命名*为文件夹的文件。包括其中一位-rf,并观看乐趣;-)
RBerteig 2010年

@RBerteig:mkdir './-rf '(ls –classify,shell别名中的常见默认值,将附加一个/)

Answers:




34

或者,您始终可以在其中编辑目录并以这种方式删除文件。

vim .

然后只需删除上面带有文件的行即可(使用D,dd无效)。


5
好招![几个没用的字符]
塞尔吉奥·阿科斯塔

我认为这不应该像今天下午我第一次看到这个答案时的那种vim否决票一样,但是我没有机会去验证那个有干事模式的人。显然,既不建议在文本编辑器中编辑实际目录本身,也不能在没有真正的专家级跳跃的情况下进行编辑。请注意,emacs由于相同的原因,这也将起作用。
RBerteig

1
聪明的Vim使用可加分!:)
Pierre-Antoine LaFayette 2010年

很高兴知道))
schöppi2010年

25

使用一种删除怪异文件名的通用技术。

 ls -li

查找文件的索引节点编号,然后使用。

find ./ -inum <number of file> -delete

无需记住所有特殊情况。


4
不知道find有权删除文件。
zneak 2010年

这对于捕获名称不明的文件(以退格字符开头或包括退格字符或末尾有多余的空格)也非常有用,前提是您可以在包装盒上找到不错的GNU查找。
奥凡(Olfan)2010年

17

即使我知道“ rm--filename”技巧,通常当我以某种方式获得带有前导的文件时-要删除其名称时,我会启动GUI文件管理器并从那里开始,以消除这种机会错误。


1
他可能根本没有GUI,因此这可能不起作用。
Wuffers 2010年

12
如果它是愚蠢的和错误的,也许应该被否决,但是我不相信仅仅因为它“可能行不通”而否决了这个答案。这个建议不会有任何危害。
JT.WK

4
总有午夜指挥官(或其他基于光标的文件管理器),对于那些没有X.
thomasrutter

9

如果您只想确定:

 mv -- -rf remove.-rf
 [[check]]
 rm remove.-rf

4

万一您在某些非GNU Unix上,如果您感到自己被拖回了石器时代(没有--语法,没有-inum切换开关,没有取消链接命令,编辑器拒绝编辑目录等),您仍然可以帮助自己:

find . -name '-rf' -print | xargs rm -i

这将导致find将所有可能的候选对象提供给rm,而rm则将针对它被馈送的每个文件都请求允许/拒绝。

如果您rm甚至不支持该-i交换机(任何人在PA-RISC 1.1上使用HP-UX 10.2?),请多加注意:

find . -name '-rf' -print
# check that find's output is exactly and only what you need to delete
find . -name '-rf' -print | xargs rm

如果您的系统甚至没有find呢?
Lie Ryan

那确实是邪恶的。las,我还没有安装Unix系统。你能给我指点吗?
Olfan 2010年

考虑一下,如果在serverfault上提出问题,我的答案会更合适。超级用户不太可能拥有我所指的古老机器。而那些这样做的人将学会自助。;-)
Olfan 2010年

+ 1,@ Olfan,在您的防守中,某个刚在壁橱中某个地方遇到旧的Unix的人仍然需要资源来学习以下方面的技巧和窍门...
RBerteig 2010年

3

支持jleedev的答案,我会改进:

rm -i -- -rf

处于交互模式并要求确认,因此您可以确定删除了什么。(尽管解决方案很好。但这只是为了让您省心)

实际上,甚至可以使用:

\rm -i -- -rf

确保您没有使用任何别名。


2

正如已经建议的那样,我一直使用语法

rm -rf -- filename

当我不得不删除带有短划线作为前缀的文件时,因为-对命令说它不搜索任何其他参数,而只是搜索文件名。

请记住,为了通过意外删除文件来保护我的重要文件夹,我习惯于创建一个名为-i的空文件,通常在解决*搜索时将其放在文件列表的顶部。所以命令

rm -rf *

当在受保护的文件夹中执行命令时,执行以下命令时会爆炸:

rm -rf -i filename1 filename2 .... (all the other files in the folder)

然后,shell不再要求立即确认,而不再立即删除所有内容(如-i选项所要求的)。


+1表示-i文件名被破解-“我”表示怀疑,但测试出来了!
rymo

2

上一次遇到此问题时,我使用以下方法解决了该问题:

蟒蛇

导入操作系统

os.remove(“-rf”)


1

马丁·克莱顿是对的。

这是非常简单和合乎逻辑的。如果存在选项时,它总是-XXX或者--CCCC所以如果你把一个./或完整路径-rf不能被视为一个选项,将被视为正常的字符串。

它适用于“所有”奇怪的文件名。

#pwd
/ tmp / TEST
#touch ./-rf
#ls 
-射频
#rm ./-rf 
#ls
#

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.