Samba文件名中的特殊字符

当通过Samba提供包含特殊字符(如“()?:”)的文件时,这些名称会变成无法识别的格式。 例如,一个文件

my_file:_(important).txt 

显示为

 M43J1E~0.TXT 

有没有办法避免这种行为(显然没有重命名文件)? 我假设字符编码不是怪,因为几个UTF-8字符似乎工作正常。

    Windows不允许Unix允许的文件名中的某些字符。 桑巴“mangles”的文件名,使他们符合Windows的限制。 您可以检查文件/etc/smb.conf/etc/samba/smb.conf来查看是否有适当的设置。 要显示这些设置以及默认值,请使用以下命令:

     testparm -vs | less 

    为了缩小这一点:

     testparm -vs|grep "case\|mangl" 

    请参阅此页面了解更多信息。 此外,看到这个页面大约一半(与前一个链接相同的信息)。

    • 我拥有一台运行Samba 3的64位OS X 10.11“El Capitan”的Apple Macbook Pro笔记本电脑,我通过Macports安装。

    • 我还拥有一台运行Samba 3的64位GNU / Linux XUbuntu 16.04“Xenial Xerus”的Dell Inspiron笔记本电脑,我通过APT安装。

    两台机器都有networking共享文件夹,并使用Samba为了在我的WLAN(无线局域网)上进行通信。

    我的系统都是巴西葡萄牙语。 因此,我使用特殊字符如çáãôé ,等等。

    当我使用我的Linux笔记本电脑访问我的OS X Samba共享时,所有的string都显示正确:单词maçãônusbênção显示正确。 文件和长名称的文件夹也显示出来,他们的名字显示正确。 因此,在OS X上运行的Samba服务器已经正确configuration…

    …但事情并非如此:如果我使用OS X上的Finder应用程序来访问我的Linux Samba共享,那么至less有一个特殊字符的文件和文件夹不会显示我),文件和文件夹的长名称被转换为奇怪的短名称。 因此,我的Linux机器上运行的Samba服务器出了问题。

    =>在我的情况下,解决这个问题的方法是在我的Linux机器上的smb.conf文件中的[global]部分中添加以下行:

     mangled names = no dos charset = CP850 unix charset = UTF-8 

    之后,我打开了一个shellterminal窗口,并使用以下命令重新启动了Linux Samba服务器:

     sudo service smbd restart 

    …可以被其他命令replace(如果上面的命令在你的Linux发行版上不起作用):

     sudo systemctl restart smbd.service 

    在重新启动Linux Samba服务器后,OS X上的Finder应用程序终于正确显示了之前隐藏的所有文件和文件夹,因为它们的名称中包含一个或多个特殊字符。 受损(“缩短”)的名字也是“未encryption”的。

    脚注

    1. 在GNU / Linux系统中, smb.conf文件的标准位置是/etc/samba/smb.conf
    2. 假定你的Linux系统有smb.conf文件存储在标准位置/etc/samba/ :有几种不同的方法可以编辑smb.conf文件。 例如,如果你不使用桌面环境(例如,你的系统只有一个shellterminal,没有窗口),你可以安装纳米文本编辑器,通过发出一个命令,如sudo apt-get install nano -ysudo dnf -b -y install nano或其他东西(取决于你使用的是哪个Linux发行版),然后运行sudo nano /etc/samba/smb.conf 。 如果你使用的是桌面环境,你可以安装一个graphics化的文本编辑器,如GNOME编辑 ,通过发出一个命令,如sudo apt-get install gedit -ysudo dnf -b -y install gedit或其他东西在哪个Linux发行版上使用),然后运行sudo gedit /etc/samba/smb.conf
    3. 在Samba 3+中, display charset参数已被弃用。
    4. dos charset参数不支持UTF-8参数。 因此,它必须使用默认参数CP850
    5. mangled names = no指示Samba服务器不缩短文件和文件夹的长名称。 因此,由于Samba客户端只是向用户复制Samba服务器提供给客户端的内容,一旦服务器configuration正确,客户端将不再向用户显示任何缩写名称。

    从桑巴文档你可以使用这些:

     dos charset = ISO8859-1 unix charset = ISO8859-1 display charset = ISO8859-1 

    我在OS-X和Windows上使用共享文件夹。 某些文件具有相同的问题,因为它们属于以下内容:它们使用文件名中的字符,而不受Windows支持。

    请参阅: http : //support.microsoft.com/kb/177506

    它列出了文件或目录中Windows不支持的字符。 我想,Samba在列出文件和目录时使用相同的字符列表。

     A filename cannot contain any of the following characters: \ / : * ? " < > | 

    再往下,他们写道:

    对命名文件,文件夹或快捷方式有效的字符包括字母(AZ)和数字(0-9)的任意组合,以及以下特殊字符:

     ^ Accent circumflex (caret) & Ampersand ' Apostrophe (single quotation mark) @ At sign { Brace left } Brace right [ Bracket opening ] Bracket closing , Comma $ Dollar sign = Equal sign ! Exclamation point - Hyphen # Number sign ( Parenthesis opening ) Parenthesis closing % Percent . Period + Plus ~ Tilde _ Underscore 

    但是,我个人把不允许的字符列表作为向客户介绍的参考);