几周前我使用了 Linux 的实时启动 CD,并将屏幕截图重定向到我的 NTFS 驱动器。
文件名包含冒号符号:,该符号是 NTFS 文件系统上不支持的文件名字符之一。
不支持的字符有:\ / : * ? " < > |
我尝试使用常规命令提示符、PowerShell、一些脚本语言,甚至 Windows 上的 Bash 来解决这个问题,但都没有成功。
我什至尝试了\\?\路径技巧,但它也不起作用。
该限制显然与 NTFS 文件系统有关,那么从这里继续的方法是什么?
LPC*_*hip 40
重新启动到您的 linux live CD 并从那里更正它。
Windows 无法处理这个问题。这需要在 Linux 上完成。
iBu*_*Bug 16
@LPChip 的答案是解决您问题的答案,但我有更多细节,我认为这里值得另一个答案。
文件系统是管理磁盘上文件的数据结构,因此通常 FS 本身对文件名的限制很小 - 大多数现代 FS(包括 NTFS)甚至可以在技术上保存空字节,就像 Python 保存字符串(长度 + 字节数组)的方式一样。
FS 支持任意字符串并不意味着您应该支持。实际的操作系统对文件名施加限制,以便它们可以向上层提供一个合理的“路径”接口,应用程序可以在其中访问文件。
这就是每个操作系统对文件名都有一些限制的原因。值得注意的是,Linux 和其他 Unix 系统允许在文件名中使用除空字节和路径分隔符(正斜杠)之外的所有字符,不包括两个保留名称.和..(当前目录和父目录)。由于历史原因,Windows 通过普通 Windows API 保留了更多字符和更多特殊名称(例如CON、LPT、COM1toCOM9等),但仍然允许通过 WSL1 使用的低级 API 来使用这些名称。例如,您可以/mnt/c/CON在 WSL1 中创建类似的内容并正常使用它,但您无法在 WSL 环境之外对其执行任何操作。
在 Linux 上,fsck如果程序以某种方式最终出现在文件系统中,则它们可以重写无效的文件名。我想chkdsk.exe可以做类似的事情,但我还没有验证这一点。
| 归档时间: |
|
| 查看次数: |
3365 次 |
| 最近记录: |