Samba文件名中的特殊字符


18

通过Samba提供文件名中包含特殊字符(例如“()?:”)的文件时,名称将转换为无法识别的格式。例如,一个文件

my_file:_(important).txt

显示为

M43J1E~0.TXT

有没有一种方法可以避免这种行为(显然,无需重命名文件)?我假设不应该使用字符编码,因为几个UTF-8字符似乎可以正常工作。


Ubuntu 9.10上的Samba版本2:3.4.0-3ubuntu5.5
Matti 2010年

3
在smb.conf中添加“恶意名称=否”可以解决此问题(感谢Dennis Williamson)。
马蒂

Answers:


10

Windows不允许Unix允许的文件名中的某些字符。Samba“破坏”文件名以使其符合Windows限制。您可以检查文件/etc/smb.conf/etc/samba/smb.conf查看已有的设置。要显示这些设置以及默认设置,请使用以下命令:

testparm -vs | less

缩小一点:

testparm -vs|grep "case\|mangl"

有关更多信息,请参见此页面。另外,请参见本页的一半(与上一个链接相同的信息)。


9

我在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

但是,我个人以不允许使用的字符列表为参考,在此向一些客户介绍情况;)


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

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

两台机器都有网络共享的文件夹,并使用Samba以便在我的WLAN(无线LAN)上进行通信。

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

当我使用Linux笔记本电脑访问OS X Samba共享时,所有字符串均正确显示:诸如maçãônusbênção之类的单词均正确显示。还显示带有长名称的文件和文件夹,并且正确显示了它们的名称。因此,已经正确配置了在OS X上运行的Samba服务器...

...但是事情没有反过来:如果我使用OS X上的Finder应用程序访问我的Linux Samba共享,则不会显示具有至少一个特殊字符的所有文件和文件夹(它们对于我),文件和文件夹的长名称被转换为怪异的短名称。因此,在我的Linux机器上运行的Samba服务器出了点问题。

=>就我而言,解决此问题的方法是将以下行添加到Linux计算机上文件[global]内的部分中smb.conf

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

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

sudo service smbd restart

...可以用其他命令代替(如果以上命令在您的Linux发行版中不起作用):

sudo systemctl restart smbd.service

重新启动Linux Samba服务器之后,OS X上的Finder应用程序最终正确显示了所有先前隐藏的文件和文件夹,因为它们的名称具有一个或多个特殊字符。整齐(“缩短”)的名称也被“取消修改”。

脚注

  1. 在GNU / Linux系统中,smb.conf文件的标准位置是/etc/samba/smb.conf
  2. 假设您的Linux系统将smb.conf文件存储在标准位置/etc/samba/:有几种不同的方法来编辑smb.conf文件。例如,如果您不使用桌面环境(例如您的系统只有一个Shell终端,没有Windows),则可以通过发出诸如或之类的命令来安装Nano文本编辑器(取决于您使用的Linux发行版)正在使用),然后运行。如果您使用的是桌面环境,则可以通过发出诸如或之类的命令(取决于所使用的Linux发行版)来安装图形文本编辑器(如GNOME Edit),然后运行。sudo apt-get install nano -ysudo dnf -b -y install nanosudo nano /etc/samba/smb.confsudo apt-get install gedit -ysudo dnf -b -y install geditsudo gedit /etc/samba/smb.conf
  3. 在Samba 3+中,该display charset参数已弃用。
  4. dos charset参数不支持该UTF-8参数。因此,它必须使用默认参数CP850
  5. mangled names = no指示Samba服务器不要缩短文件和文件夹的长名称。因此,由于Samba客户端只是向用户复制Samba服务器提供给客户端的内容,因此,一旦服务器配置正确,客户端就不会再向用户显示任何简称。

4

从samba文档中,您可以使用以下命令:

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

4
这并向[global]添加错误的名称= no,将我固定在nas4free上
Christopher Chase
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.