我有一个装有 Windows 的硬盘驱动器,连接到我的 Linux 机器上,用于备份一些信息。我想删除“临时 Internet 文件”文件夹之一,但它删除了除其中一个之外的所有文件夹。它返回一个错误(通过某些目录的路径):
rm: cannot remove '<path>/dorothy[1].js': Is a directory
然后我使用 cd 到达文件所在位置并运行以下命令:
rm -rf dorothy[1].js
它返回时没有错误,但如果我ls
它仍然显示在目录中。我也尝试过使用这两种方法来删除它,但没有效果(<inode> 是文件名的 inode)。
ls -i
find . -inode <inode> -delete
find . -inode <inode> -exec rm {} \.
然后我尝试做cd dorothy[1].js
有效的事情。进去后我用ls
它返回了这个:
ls: reading directory.: Input/output error
那么我该如何删除这个呢?
答案1
您有一个 NTFS 文件系统。在这种情况下,您无法在除 Windows 计算机之外的任何计算机上安全地解决问题。 (Linux 代码很好,但我不建议您相信它可以修复外部文件系统。)
将磁盘放入 Windows 系统并运行CHKDSK /F Q:
,或为其分配的任何驱动器号。然后尝试删除该文件。如果失败,您将需要等待CHKDSK /R Q:
,这可能需要几个小时才能运行。
答案2
请参阅马特的评论。
是时候进行 fsck 了。
你所描述的情况很少见。看起来您至少有两个 inode 指向 dorothy[1].js + 一个 inode 的目录条目已损坏 + 认为它指向一个目录。
除非您使用文件系统的开发/测试代码,否则这种情况永远不会发生。
首先运行 fsck。然后确保您正在运行稳定的文件系统代码,您很可能就是这样。然后下一步是查看已编写的在磁盘上的物理目录结构中造成混乱(技术术语)的任何自定义代码(颤抖)。
此外,您的文件名很有趣,因为它包含“[]”字符,在许多情况下这些字符将扩展为某种形式的正则表达式。这可能与您的情况有关系,也可能没有关系。
如果在 fsck 后一切正常+问题再次出现,您可能需要进行一些长时间的调试,首先发布您的内核版本+系统上安装的所有软件包。