我需要在Windows机器和Linux机器之间保持一个非常大的目录结构(几百GB)的同步。我使用rsync进行复制,因为它会自动忽略未更改的文件,并且更能有效地复制更改的文件(只复制差异)。
我遇到的问题是,一些运行在Windows文件系统上的应用程序喜欢生成各种我不想复制的元数据文件。由于所有这些文件都是使用Windows文件属性隐藏的,我认为简单地指示rsync忽略这些文件是非常有帮助的。但是rsync手册页不提供任何这样的选项。
目前,我使用SMB挂载Windows文件系统。当我使用控制台列出目录中的文件(使用ls -l
)时,它会列出包括隐藏文件在内的所有文件,但当我使用nautilus列出文件时,它会识别一些文件是隐藏文件,并且只有在启用“显示隐藏文件”时才向我显示它们。所以我不确定rsync是否能看到Windows文件是隐藏的。
任何建议都会很有帮助。
发布于 2009-11-15 20:42:14
要将DOS属性导入Linux,您需要编辑smb.conf文件。
导入Windows属性有两种不同的方法。
第一个选项是设置map hidden = yes
,这意味着Windows上的隐藏文件将在Linux上设置世界执行位。要使其工作,至少还必须在您的001
中使用create mask
。
另一个选项是设置store dos attributes = yes
,这意味着user.DOSATTRIB属性将存储在名为user.DOSATTRIB的Linux文件系统中的扩展属性中。
rsync
不具备基于普通属性或扩展属性过滤文件的能力,但它可以排除以其他方式准备的文件列表。您可以使用find
命令根据Unix属性创建此列表。我所拥有的find
版本似乎不支持扩展属性,但仍然可以在find
中使用-exec
选项获取所有文件的扩展属性并对其进行筛选。
由于find
可以在普通Unix权限上进行筛选,如果您选择了world选项,那么find . -perm -001
将在您安装的Windows文件系统中找到所有隐藏的文件。可以将此列表放入文件中,然后使用rsync --exclude-from=FILE
从rsync中排除这些文件。
发布于 2009-11-12 14:12:52
我不相信rsync有任何洞察力,在Windows文件共享中哪些文件被标记为“隐藏”。这些文件是否还有其他共同之处,如命名格式?您可以使用--排除或-排除-从选项到模式匹配文件名不复制。(
发布于 2009-11-12 14:32:11
我没有给你的答案,但我不认为rsync是正确的地方寻找。我会尝试在窗口端的共享选项中找到一些东西,或者一个mount.cifs选项。
使用ACL扩展名可能是可能的,但是传统的unix权限中没有任何东西可以隐藏文件。如果将句点作为文件/ dir名称中的第一个字符,它就会被隐藏。
https://serverfault.com/questions/84005
复制相似问题