具有特殊字符文件的Rsync在Mac和Linux之间无法正常工作

我想使用rsync来备份我的Ubuntu服务器和一个驻留在Mac上的磁盘。 但是我没有让它正常工作,因为每次我在初始时间之后重新运行rsync操作时,首先删除具有特殊字符的文件,然后重新同步。 似乎不同的字符集存在问题。

首选解决方案似乎是使用--iconv选项:

您可以使用rsync的–iconv选项在UTF-8 NFC和NFD之间进行转换,至少如果您使用的是Mac。 有一个特殊的utf-8-mac字符集代表UTF-8 NFD。 因此,要将文件从Mac复制到NAS,您需要运行以下内容:

rsync -a --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/

这将在远程服务器上将所有本地文件名从UTF-8 NFD转换为UTF-8 NFC。 文件的内容不会受到影响。

感谢@Jan,我在 2.6.9 上更新了我的mac上的rsync版本 。 到3.1.1。 尽管如此,我仍然不在那里,因为我现在又收到了一个错误:

 iconv_open("UTF-8", "utf-8-mac") failed rsync error: requested action not supported (code 4) at rsync.c(118) [sender=3.0.9] rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1] 

我无法理解为什么“请求的操作不受支持”,因为我的Ubuntu(12.04)上的rsync版本似乎是3.xx之后,因此应该支持--iconv选项。

编辑:让我补充说,当我(在Mac上,nota bene)从Mac到Linux启动rsync时,一切都运行良好:

 rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/ 

但是,从Mac中走另一条路并不起作用。 奇怪的是,测试从linux机器启动rsync会产生这个奇怪的消息:

 rsync: on remote machine: --iconv=UTF-8-MAC: unknown option rsync error: syntax or usage error (code 1) at /SourceCache/rsync/rsync-45/rsync/main.c(1333) [server=2.6.9] rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9] 

包括非常奇怪的声明[server=2.6.9] ,虽然我已在Mac上更新到3.1.1。 由于某些原因,它看起来我的Linux机器’只看到’Mac上的原始rsync版本。

有关如何解决这个问题的任何建议?

解决方案非常简单:很多由于我在研究问题时读到的评论,我认为你应该按照转换顺序指定字符集; 但似乎这不是正确的语法。 相反,当从mac初始化rsync时,应始终使用--iconv=utf-8-mac,utf-8 ,并且在从linux初始化rsync时始终使用--iconv=utf-8,utf-8-mac机器,无论我是否要从mac或linux机器同步文件。

然后就像魔术一样!

编辑:的确,有时,仔细检查手册页是一件好事。 在这里,黑色白色:

 --iconv=CONVERT_SPEC Rsync can convert filenames between character sets using this option. Using a CONVERT_SPEC of "." tells rsync to look up the default character-set via the locale setting. Alternately, you can fully specify what conversion to do by giving a local and a remote charset separated by a comma in the order --iconv=LOCAL,REMOTE, eg --iconv=utf8,iso88591. This order ensures that the option will stay the same whether you're push- ing or pulling files. 

我可以确认这是有效的,我遇到了同样的问题。 在我的情况下,任何带有重音字符的文件在目标上都是不可读的。 我只是通过使用比较文件夹应用程序在我的Mac上运行文件夹比较来发现它: https : //itunes.apple.com/gb/app/compare-folders/id816042486?mt = 12

添加了上面的–iconv = utf-8-mac,utf-8和BOOM! rsync用一个新的重音文件替换了。

要添加一些信息,因为上面的链接似乎不再有效,要将rsync升级到3.1.2,请安装Macport并运行:sudo port install rsync

你看到远程服务器返回版本2.6.9的原因是因为旧版本实际上仍然存在,远程服务器正在看到一个而不是新版本。

版本2.6.9位于/ usr / bin中