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