OS X资源分支是附加到常规文件的备用数据stream。 它们可能包含文件的自定义图标,彩色标签,关键字或由用户或应用程序设置的任何其他元数据。
它们本地支持OS X的HFS +文件系统,但是每当OS X挂载另一个文件系统时,无论本地(FAT32)还是远程(NFS,SMB),它们都存储在所谓的“dotbar”文件中:资源分支为常规文件name.ext
存储在另一个常规但隐藏的文件._name.ext
。 (它们不能与.DS_Store
文件混淆,它们存储目录的视图设置,例如图标与列视图或其窗口的位置。)
dotbar ._
文件的问题在于,它们是目标文件系统中的实际常规文件,具有与原始文件相同的扩展名,因此以多种方式造成严重破坏。 例如,Ant和Maven会将._MyClass.java
作为另一个Java文件进行编译。
我发现可以将OS Xconfiguration为在SMB命名stream中存储资源分支,并且可以将Sambaconfiguration为将命名stream存储在POSIX扩展属性中,或者也可以将其存储在 别处的软件仓库目录中 。
这两个解决scheme将解决dotbar文件污染目标文件系统的问题,但我不能得到任何工作。
XATTR
首先我试着用xattr:
vfs objects = streams_xattr kernel oplocks = no
后面的选项是由于这个错误 。 我告诉OS X使用它,通过在共享的根目录中进行,在安装之前:
touch .com.apple.smb.streams.on
但是当我试图用Finder复制文件时,我得到这个错误:
Finder无法完成操作,因为“hello.java”中的某些数据无法读取或写入。
(错误代码-36)
仓库
然后我试着用仓库:
vfs objects = streams_depot
将.com.apple.smb.streams.on
留在共享的根目录中。 试图用Finder复制相同的文件,我得到了另一个错误:
由于发生意外错误,操作无法完成
(错误代码-50)
我如何使OS X与这两个选项中的任何一个一起工作? 我的目的是从共享目录中得到那些讨厌的。
我试图简单否决dotbar文件:
veto files = /._*/ delete veto files = yes
但是,这会导致一些应用程序失败,例如从OS X通过安装的SMB共享运行时的Mercurial 。
我使用OS X 10.9.5作为客户端; 从Debian Wheezy作为服务器的Samba 3.6.6。
编辑:这是我的configuration请求:
[global] security = user invalid users = root workgroup = COMPANY_NAME encrypt passwords = true panic action = /usr/share/samba/panic-action %d syslog = yes syslog only = yes # PERFORMANCE TUNING socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072 SO_KEEPALIVE read raw = true write raw = true use sendfile = true min receivefile size = 16384 aio read size = 16384 aio write size = 16384 max xmit = 131072 getwd cache = true # DEFAULT OPTIONS FOR ALL SHARES writeable = true force group = company_group create mask = 664 security mask = 664 force create mode = 664 force security mode = 664 directory mask = 2775 directory security mask = 2775 force directory mode = 2775 force directory security mode = 2775 # solve problem where OS X clients remove mode 0100 map archive = no [homes] browseable = no
看起来您可能可以使用vfs_streams_xattr VFS模块堆叠的新vfs_fruit模块执行此操作。
例如,看这个邮件列表线程 。 您需要一个支持扩展属性的基础文件系统,并且必须在启用它的情况下装载它。
但是 ,根据Samba维基的说法,这是Samba 4.2的一个新function,所以你需要升级。 (截至目前,Debian Sid [实验]还没有4.2。)
如果你不喜欢抛弃Debian软件包并构build新版本的Samba(或者升级到Jessie并等待4.2出现在jessie-backports中),那么你可以隐藏客户端的点文件。
例如,您可以将两个不同的共享指向同一个目录,其中一个隐藏._files。 也许不是最佳的,但可能是可行的。
我不知道是否可以使用本地Mac设置,但是您可以使用像Asepsis这样的工具来解决这个问题。 它会将所有的Mac粪便移动到他们自己的文件夹。