如何在Linux中删除名为“?”的文件?

11

我创建了一个名为"?"的文件,有谁知道如何删除它吗?

似乎在Linux系统中,?是一个特殊字符,我使用的是Redhat操作系统。

我已经尝试过:

    rm ?
    rm "?"
    rm \?

他们都失败了,我得到了错误提示,显示该文件不存在。

4个回答

25

查找文件的inode:

ls -li

然后使用inode删除文件:

find . -inum <inode-number> -exec rm -i {} \;

顺便说一句,rm ? 对我来说很好用。这是我的bash版本:

# bash --version
GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)

1
当您执行 rm ? 时,它会删除目录中所有单个字符的文件。尝试 touch ?touch arm ?。这将同时删除 ?a - Varun
顺便说一句,rm ? 对我来说很好用。这可能是因为这是您目录中唯一一个只有一个字符的文件。 - devnull
1
你确定这个两步骤的过程会有效吗? - anubhava
1
@anubhava 看起来 ? 实际上是其他字符。 - devnull
@anubhava,你的评论是针对我说的吗?如果是的话,是的,我遇到过许多带有垃圾字符的文件,无法通过运行“rm”命令来删除它们。我唯一能够删除它们的方法是使用inode,而且它总是有效的。 - slayedbylucifer
显示剩余3条评论

5
`rm \?`和`rm "?"`都是删除名为`?`的文件的好方法。如果它们都没有起作用,而你仍然看到一个名为`?`的文件,那么很可能显示的`?`实际上不是一个`?`,而是将无法打印的字符替换为`?`的结果。使用GNU `ls`命令查看文件的真实名称,请尝试:
ls --quoting-style=escape

3
使用rm命令删除名为?的文件。
rm ./\?

或者从另一个目录:

rm /path/to/\?

我已经尝试了两种方法,但是它们都不起作用,然而在我朋友的机器上,我尝试过的命令和你的命令都能够运行成功。 - Yang
如果文件名是字面上的 ?,那么这个命令应该可以工作。我在测试了OSX和Linux主机后发布了它。 - anubhava
我记得在旧版的bash中,我必须使用这个命令,但是现在在我的(公司)开发环境中,版本为4.3.48的bash无法工作。我不得不使用一个没有转义字符的普通命令,就像下面这样:rm ./? - carnicer
它在我的新Bash 4.4.19(1)-release上运行良好。 - anubhava

1
你可以通过文件的 inode 号码来删除文件。请参考下面的输出:
alplab:~/cad# ls -il
63051 -rw-r--r--    1 root     root             0 Nov 12 11:48 ?
alplab:~/cad# find . -inum 63051 -exec rm -i {} \;

我使用了"find"命令删除了inode号码为63051的文件(该inode属于我的“?”文件)。

“rm -i” 对我没用,但你可以简化find命令并使用它来删除:“find . -inum 1234 -delete”。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接