更加人性化的 Samba 名称转换

更加人性化的 Samba 名称转换

我们的大多数计算机都运行 Ubuntu,但其中两台计算机双启动到 Windows,当我们有客人来访时,他们通常也运行 Windows 计算机。因此,除了使用 NFS 之外,我们的文件服务器(Ubuntu 服务器)还运行 Samba。

由于我们主要使用 Ubuntu,因此我们喜欢​​利用它相对于 Windows 的优势,例如能够\:*?"<>|在文件名中使用字符。当然,问题是 Windows 不接受文件名中的这些字符,因此 Samba 必须将文件名转换为更可接受的字符。然而,我发现它这样做的方式很令人讨厌。

Episode 182 - Exorcist 2: The Heretic.mp4例如,文件名变成了E4Q82R~Y.MP4。这是一个糟糕的“更正”。有没有办法让 Samba 的乱序处理对人类更友好一点?是否可以将其“更正”为类似的东西Episode 182 - Exorcist 2_ The Heretic.mp4,其中非法字符被简单地替换?

答案1

mangled map现已弃用,并且在新版本的 Samba 中不再起作用。

您可以使用vfs_catia解决问题。将以下行添加到 smb.conf:

vfs objects = catia
catia:mappings = 0x003a:0x2236,0x003f:0x0294,0x002a:0x2217,0x003c:0x276e,0x003e:0x276f,0x0022:0x02ba,0x007c:0x2223,0x005c:0x29f9

映射以 0x 为前缀的十六进制字符代码指定,并以冒号分隔。提供的映射会将非法字符重新映射到不太可能在任何语言中使用的 unicode 相似字符。

:?* < >“| \
∶ ʔ ∗ ❮ ❯ ʺ ∣ ⧹

代码可以放在下面[global]或单独的[share]部分中。将其放在[global]可能会影响性能。

请注意,您映射到的任何字符都不能用于服务器上的文件名,否则它们将无法访问。

file❮name.txt例如:Windows 客户端访问服务器上名为的文件时,file<name.txt由于映射关系,会向服务器发出请求,从而导致文件未找到错误。

答案2

此链接您可以看到 mangling 选项。我认为首先您应该禁用该选项:

mangled names

之后我想名字应该看起来会更好......

要替换冒号,例如使用这一行:

mangled map =(: _)

您可以添加更多替换规则,如下所示:

mangled map =(: _) (foo bar)

(也用 bar 替换任何出现的 foo)

答案3

较新的 POSIX 客户端(至少是 Linux 和 macOS)不需要手动进行字符映射,而是可以与服务器相互协作,因此带有 NTFS 保留字符的文件名就可以正常工作。Samba 文档以及手册页:

在服务器上(参见man vfs_fruit):

vfs objects = catia fruit
fruit:encoding = native

在客户端上,可能需要使用mapposix* 选项进行挂载(请参阅man mount.cifs)。


*这好像是mapchars 应该是正确的选择,但经过测试,mapposix是有效的。

相关内容