友好的桑巴名字改写


11

我们的大多数计算机都运行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
Samba邮件列表中查看此补丁的描述。所描述的方法可以直接使用Samba 4.1.4-Debian
mpy

@mpy我已经尝试过了,但是当我将带有非法Windows字符的文件复制到samba共享时,它仍然对我不起作用。它仅用于转换本来可以的东西(例如将空格转换为符号),而对于不起作用的东西(例如将':'转换为另一个符号)无效。有指针吗?
2013年

Answers:


11

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]可能会影响性能。

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

示例:由于映射,Windows客户端访问file❮name.txt服务器上命名的文件将向服务器请求file<name.txt,这将导致找不到文件错误。


我已经尝试过了,但是当我将带有非法Windows字符的文件复制到samba共享时,它仍然对我不起作用。它仅用于转换本来可以的东西(例如将空格转换为符号),而对于不起作用的东西(例如将':'转换为另一个符号)无效。有指针吗?
2013年

2
这很棒!需要注意的一件事是您不能将所有内容都映射到相同的字符,并且在您的示例中,任何带有下划线的内容都将不再可用。相反,我用下面的映射:0x3a:0x7e 0x3f:0x5e,所以:变得~?^
杰弗里

2

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

mangled names

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

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

mangled map =(: _)

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

mangled map =(: _) (foo bar)

(也用bar代替了foo的出现)


他们现在看起来好多了。实际上,当我将“混合名称”设置为“否”时,文件名在Windows中的显示完全不变。虽然这看起来更好,但也使Windows应用程序无法打开文件。tes:t.txt例如,如果我尝试在记事本中打开文件,则提示“找不到\\ tes:t.txt文件。” 其他“非法”文件在其各自的应用程序中也是如此。
亚历克斯

编辑了我的答案!
Michael K

mangled map已从Samba中删除。经过四处环顾,据我所知,它已于多年前被删除。log.smbd如果我尝试使用它,这就是我的文件所说的:Ignoring unknown parameter "mangled map"
Alex

您说得对...已弃用。它不会工作。并不是那么简单-复杂的文件名是为了防止具有dame名称的两个文件。文件foo:.txt和foo_.txt可能存在,然后重命名将失败。因此,最好的办法是强制执行文件名规则,以便仅允许两个文件系统中都允许使用的名称。
Michael K
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.