仅当我尝试同步扩展属性(Mac OS X)并出现以下错误时,RSYNC 才会失败。
rsync error: protocol incompatibility (code 2) at io.c(599) [sender=3.1.0]
rsync: [receiver] write error: Broken pipe (32)
据我所知,rsync 要求目标服务器也安装 rsync。我猜这个问题发生是因为我使用较新的版本 (3.1) 发出此命令,而远程服务器是具有两个版本的 Mac,系统默认为 2.6.9。
如何确保我的 rsync 命令使用正确的远程 rsync 版本?
答案1
首先,介绍一些背景知识:rsync 协议版本 2 不支持扩展文件元数据。Apple 在其 rsync 版本中添加了一种 hack,即以 AppleDouble 格式将扩展元数据作为伪文件发送 - 例如,对于 file.txt,它会将文件的内容同步为“file.txt”,并将其元数据同步为伪文件“._file.txt”。rsync 协议版本 3 增加了对扩展元数据的本机支持,但这当然与版本 2 完全不兼容。
幸运的是,只要您知道远程计算机上安装了兼容版本的 rsync,解决方案就很简单:使用选项--rsync-path=
指定在哪里找到兼容的远程版本。例如,如果本地和远程计算机上的 /usr/local/bin/rsync3 中都安装了 rsync 版本 3,则可以使用类似以下命令:
/usr/local/bin/rsync3 -aNHX --fileflags --rsync-path=/usr/local/bin/rsync3 -e ssh ...etc...