我有一个包含很多文件的文件夹,其名称有多个冒号。例如: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 文件系统已损坏。
我建议:
- 启动进入 Windows
- 执行完整的文件系统检查(Linux 工具还不足以完成此任务)
- 重新引导至 Linux,然后重试。