如何删除名为“ \”的文件或目录?


20

我在Ubuntu机器上使用终端,并且有一个文件要删除。该文件的名称为\(仅反斜杠)。

现在我通常会做

rm filename

但是,如果这样做,rm \它会认为我正在尝试编写多行命令。

如何删除该文件?我知道我可以只使用GUI文件系统,但这不是很有效。

因此,如何删除(在终端中)名为的文件\


1
为什么有一个名为那个的文件?(它甚至不让我code在此评论中放在此处!)
AJMansfield 2013年

7
如果我没记错的话,尝试删除名为<BEL>的文件(也称为Ctrl-G)会更有趣。每当您执行一次ls时,键盘都会对您发出哔哔声,直到您(a)发现了不可见的文件;(b)确定如何删除名称中只有一个不可打印字符的文件。
Pieter Geerkens

1
更重要的是,如何删除名为“ /”的文件?
Curt

1
@Curt fsck。说真的 如果/存在一个名为的文件,则您的文件系统已损坏。
zwol

2
我一直喜欢*自己命名的文件...
RBerteig

Answers:


48

使用rm \\(用另一个反斜杠转义反斜杠)。请注意,这对于命名目录\(使用rmdirrm带有-r标志)也类似。

例:

> mkdir演示
>光盘演示
>触摸\\
> ls -l
总计0
-rw ------- 1 hennes用户0 Jul 29 20:25 \
> rm \\
> ls -l
总计0

3
或者,按照相同的原则rm '\'(但不是 rm "\")。
evilsoup

2
@evilsoup只是为了提供一些进一步的说明,该\ 字符在双引号分隔的字符串中用作转义字符。rm "\"由于第二个引号与转义字符一起使用,所以说的内容将解析为未封闭的字符串(因此,将其解析为双引号字符本身,而不是字符串的结尾)。因此,终端将一直等到您用另一个完成字符串"。在这里使用双引号的等效方法将是rm "\\"(直接等同于rm '\'rm \\ ,您已经确认)。
2013年

15

手动删除名称中带有笨拙字符的文件的一般策略是

rm -i ./*

这将提示您选择是否删除目录中的每个文件。


3
或者,单身是一个字符。rm -i ./?
Hennes

1
是的 如果您可以编写比./*更具体的glob,那总是个好主意,尤其是在进行破坏性操作时。
zwol

4
+1为您的glob加上前缀./
evilsoup

12

您也可以通过引用文件的索引节点来取消链接

linus ~/test $ touch \\
linus ~/test $ ls -li
total 0
15204561 -rw-r--r-- 1 pat sudo 0 Jul 29 23:03 \
linus ~/test $ find . -inum 15204561 -exec rm -v {} \;
removed `./\\'
linus ~/test $ ls -li
total 0
linus ~/test $ 

0

请首先检查文件的索引节点。ls -li

137791 -rw-rw-r--。1 svr svr 366 3月11日15:57

“ \”的inode为“ 137791”,然后使用find命令删除具有inode编号的“ \”。

找 。-inum 137791 -exec rm -i {} \;

rm:删除常规文件“ ./ \”?是

然后将删除“ \”。

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.