如何删除名称中有多个冒号的文件?

如何删除名称中有多个冒号的文件?

我有一个包含很多文件的文件夹,其名称有多个冒号。例如:Mail::Message::Field::Full.3pm.gz

我想知道如何删除它们。

我努力了

rm Mail::Message::Field::Full.3pm.gz
rm Mail\:\:Message\:\:Field\:\:Full.3pm.gz
rm "Mail::Message::Field::Full.3pm.gz"

所有结果都相同:rm: cannot remove 'Mail::Message::Field::Full.3pm.gz': Input/output error

另外,我尝试过使用普通用户帐户和根用户。在这两种情况下,结果与上面相同。

rm-f选项具有相同的结果。

重命名文件时也会出现同样的问题。

当然,我对该文件夹具有写入权限。

的输出ls -l

ls: cannot access Mail::Message::Field::Full.3pm.gz: Input/output error
-????????? ? ? ? ?            ? Mail::Message::Field::Full.3pm.gz

我不知道这是否重要,但文件位于 NTFS 分区上。


更新

我不认为是硬件问题。我能够访问(写入、删除、创建、解压缩等)所有其他文件。尽管如此,我无法访问有问题的文件。

答案1

文件位于 NTFS 分区上非常重要。

在大多数 UNIX 系统上,该:符号不是特殊字符,特别是在 Linux 上(只是/特殊)。它对内核没有任何意义(尽管有些应用程序确实赋予它特殊意义,所以最好不要使用它)。在大多数 UNIX 文件系统上,包括 Linux 习惯的 ext2/ext3/ext4,您可以:像任何其他字符一样在文件名中使用。

NTFS 有更严格(但可选)的规则,因为它来自 Windows 世界。在 Windows 中,:文件名中不允许使用(或者更确切地说,在内核级别允许使用,但大多数应用程序不支持,包括默认的 shell)。这开源NTFS驱动NTFS-3G尝试阻止您在:其中创建文件名,并且如果它发现现有的无效文件名,可能会感到困惑。

NTFS-3g 使用手册指出

出于最大的可移植性和互操作性原因,它总是在 POSIX 名称空间中创建新文件。这意味着文件名区分大小写,并且允许使用除'/'和之外的所有字符'\0'。这在 Windows 上是完全合法的,尽管某些应用程序可能会感到困惑。

确保您使用的是最新版本的 ntfs-3g 驱动程序,并且文件系统未使用该windows_names选项安装。

答案2

当您说重命名时同样适用时,您的意思是您无法重命名它们,或者您设法重命名它们,但在删除时您会遇到同样的问题(我猜可能不是)。

只是检查一下,您是否尝试使用通配符,如果您没有太多文件,您可以尝试类似的方法

 rm -i Mail*essag**.gz

-i将导致您在删除之前收到提示,因此您可以检查以确保只删除所需的文件。

尽管我怀疑这是权限或文件系统的问题,而不是文件名特征的问题。或者可能是某些硬件故障的指示。

答案3

仔细阅读了所有内容后,我怀疑 NTFS 文件系统已损坏。

我建议:

  1. 启动进入 Windows
  2. 执行完整的文件系统检查(Linux 工具还不足以完成此任务)
  3. 重新引导至 Linux,然后重试。

相关内容