在同一台Linux机器上使用不同文件系统编码的硬盘,可行吗?

在同一台Linux机器上使用不同文件系统编码的硬盘,可行吗?

众所周知,Linux 和 Unix 风格的文件系统将文件名存储为字节流,与 Windows NTFS/FAT 上的 Unicode 流相反。

那么问题来了。如果我有一块旧硬盘(大约 2002 年),其 Ext3 分区上有非 ASCII 文件名,编码为“gbk”,我想将该旧硬盘连接到我的现代 Linux(utf8 编码文件名),以便我可以复制旧文件,保留文件名字符含义

那么最佳做法是什么?

特别欢迎从程序员角度的解释。

答案1

不。大多数 Linux 程序不关心磁盘或挂载点边界,并且对所有文件名在所有地方使用相同的编码。

然而,大多数公用事业仍然将文件名视为字节字符串,因此复制或使用以奇怪编码命名的文件应该没有问题。(例如,我将几个文件重命名为 ISO-8859-13,我仍然可以在命令行或 GNOME 程序中打开它们,尽管 KDE 有问题。)

您可以使用以下工具convmv将所有文件重命名为 UTF-8 名称 – 无论是在您的副本中,还是直接在原始磁盘上:

convmv -f gbk -t utf-8 -r /mnt/old-disk

(在 Linux 上,可以使用 FUSE 编写覆盖文件系统,它可以使用不同的名称编码显示来自给定路径的文件。但我不知道这样的文件系统是否存在。bindfs具有类似的用途,但它仅转换文件所有权/权限。无论哪种方式,我都坚持我的建议,即将所有名称转换为 UTF-8。)

相关内容