【问题标题】:how to remove a file named "?" in linux? [closed]如何删除名为“?”的文件在Linux? [关闭]
【发布时间】:2013-11-24 05:02:32
【问题描述】:

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

好像是这样?是 linux 中的一个特殊字符,我使用 Redhat 作为我的操作系统。

我已经试过了

    rm ?
    rm "?"
    rm \?

他们都失败了,我得到的错误是文件不存在。

【问题讨论】:

    标签: linux bash command


    【解决方案1】:

    找到文件的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)
    

    【讨论】:

    • 当你执行rm ? 时,我猜它会删除目录中包含单个字符的所有文件。试试touch ?touch arm ?。它将同时删除 ?a
    • BTW, rm ? works for me fine. -- 这可能是因为那是您目录中唯一包含单个字符的文件。
    • 您确定这 2 步过程有效吗?
    • @anubhava 看来?实际上是其他字符。
    • @devnull:哦,好吧,那是一个误导性的问题。
    【解决方案2】:

    rm \?rm "?" 都是删除名为? 的文件的好方法。如果它们不起作用,并且您似乎仍然有一个文件名 ?,那么显示的 ? 很可能不是真正的 ?,而是用不可打印字符替换的结果?。要查看文件的真正名称(使用 GNU ls),请尝试:

    ls --quoting-style=escape
    

    【讨论】:

      【解决方案3】:

      使用此rm 命令删除名为? 的文件:

      rm ./\?
      

      或从另一个目录:

      rm /path/to/\?
      

      【讨论】:

      • 我都试过了,但都不起作用,但是在我朋友的机器上,我试过的命令和你的命令都成功了。
      • 如果文件名是文字?,那么这个命令应该可以工作。我在 OSX 和 Linux 主机上测试后发布了它。
      • 我记得在旧的 bash 版本中我必须使用这个命令,但现在在我的(公司)开发环境中使用 bash,版本 4.3.48 这不起作用。我不得不使用没有转义字符的普通命令,如下所示:rm ./?
      • 它适用于我的新 bash 4.4.19(1)-release
      【解决方案4】:

      您可以通过 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
      猜你喜欢
      • 1970-01-01
      • 2013-02-27
      • 2021-04-24
      • 2021-02-01
      • 2013-05-18
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多