如何删除名称中包含“:”的NTFS文件系统文件?

如何删除名称中包含“:”的NTFS文件系统文件?

几天前我在 NTFS 可移动硬盘中备份了一些 Linux 文件,这次我需要删除这些文件。但我发现这很困难,因为:

  1. 在 Windows 上,它抱怨“找不到该商品

  2. 在操作系统为 ubuntu 12.04 的虚拟机上,当我安装硬盘(我猜它正在使用“ntfs-3g”)并使用“ rm”时,它会抱怨“没有这样的文件或目录"; 即使 " ls" 也无法获取该文件。

那么有什么方法可以正确粉碎这个文件呢?

答案1

跑步chkdsk /f在 Windows 上。它应该删除具有无效字符的文件或修复其文件名,以便可以手动删除它们。

答案2

NTFS 支持“流”,就像 HFS+ 的“分叉”一样,与常见的 UNIX 文件系统上的任何内容都不同。

Windows 上的约定是将流命名为文件名的一部分,用 分隔文件名和流名称:,这就是为什么您会收到“无法找到此项目”的信息 - 对于名称“此处:试试这个”,Windows正在文件“此处”中寻找流“尝试这个”。我猜你可以告诉 Windows 不要像这样解析文件名,但我不知道如何做。

ntfs-3g 有一个挂载选项来启用兼容的流名称解析,挂载 fs 时-o streams_interface=windows,ntfs-3g 将以:相同的方式处理文件名。因此,要检查这一点,mount|grep windows应该工作得足够好。

答案3

如果您之前尝试在包含冒号的 ntfs-3g 文件系统上运行 Windows chkdsk,但该系统在 Linux 下安装和使用时没有使用 或windows_names选项streams_interface=windows,则恢复 NTFS 文件系统完整性的唯一方法是启动 Windows 操作系统并允许 Windowschkdsk永久删除所有包含冒号的文件。

换句话说:是非常非常小心chkdsk在 Linux 下使用 ntfs-3g 写入的 NTFS 文件系统上 运行 Windows 。您将丢失所有包含冒号的文件。

使用 ntfs-3g 相互作用会导致两个后果:

  1. Tuxera 遵循 NTFS 规范的字母,允许在文件名中使用冒号。然而,几乎没有人使用专门与 Windows 不兼容的 NTFS 文件系统,并且从未打算与 Windows 一起使用,因此几乎每个人实际上都需要非默认行为。

  2. Tuxera 推荐的修复损坏的 NTFS 文件系统的安全方法是启动 Windows 操作系统,然后运行chkdsk​​。 (如果您启动 Windows 操作系统并且检测到文件系统需要修复,这也会自动发生。)

因此,如果您对文件系统的长期稳定性和安全性感兴趣,您最终将需要启动 Windows 操作系统并运行chkdsk来修复它。但是当Windowschkdsk运行时,它会删除所有文件名中带有冒号的文件没有任何提示或警告。

不幸的是,许多人使用 NTFS 作为通用文件系统来实现可移植性和备份。 Linux 中包含文件名的两个常见文件是根据主题行(Re:、Fwd: 等)命名的电子邮件和使用 Maildir 格式存储的电子邮件。因此,如果您为此目的从头开始创建 ntfs-3g 文件系统,请确保始终使用windows_namesmount 选项并在/etc/fstab.当您最终必须运行时chkdsk,文件系统上创建的所有文件都应该有效。

如果您不这样做,您可能无法删除或挽救大部分或全部 Windows 无效文件(包含冒号等的文件)。一旦创建了无效文件,Windows 就会认为文件系统已损坏,直到这些文件被清除——并且只有 Windows 才能修复文件系统。因此,从 Linux 中修复或删除文件是不可能的。

答案4

我不明白为什么这会引起你的问题。以下测试在 NTFS 文件系统上运行:

 $ mount| grep win
/dev/sda3 on /winblows type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096)
$ grep winb /etc/fstab
UUID=C0BCD19CBCD18D72   /winblows   ntfs    defaults    0   0
$ pwd
/winblows/foo

因此,我在 NTFS 分区中运行:

$ touch :a a: a:b
$ ls
:a  a:  a:b
$ rm :a a: a:b

无论如何,所有这些命令都有效,可能的解决方法是:

rm \:a
rm -- :a
rm ':a'
rm *:*
find . -name "*:*" -delete

相关内容