rm 不删除文件,认为它是一个目录

rm 不删除文件,认为它是一个目录

我有一个装有 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 后一切正常+问题再次出现,您可能需要进行一些长时间的调试,首先发布您的内核版本+系统上安装的所有软件包。

相关内容