Mac上的rsync --iconv选项不起作用(从远程Linux服务器同步到本地Mac)


9

我想使用rsync将数据从远程Linux服务器备份到本地Mac。我想在本地Mac上初始化此操作。除存在特殊字符问题外,所有其他方法都工作正常:每次我重新运行rsync操作(在初始同步之后)时,首先删除具有特殊字符的文件,然后重新进行同步。据我了解,不同的字符集存在问题,首选的解决方案似乎是使用以下--iconv选项:

您至少可以在Mac上使用rsync的--iconv选项在UTF-8 NFC和NFD之间转换。有一个特殊的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。文件内容不会受到影响。

问题在于,这对我来说仅是“一种方式”,即从Mac同步到Linux时。但是我想“另辟go径”,即从Linux机器同步到Mac。我想从本地Mac初始化操作。但是当我尝试:

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

我收到一个错误:

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]

我不知所措,为什么这不起作用。我在Mac上的rsync版本已从2.6.9更新。至3.1.1。使用Macports。请注意,当我(在Mac上为nota bene)在Mac上启动rsync到Linux时,该操作才起作用:

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

但是从Mac转到另一种方式-这是我想做的-不起作用。

奇怪的是,测试从linux机器启动同步会产生以下奇怪消息:

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版本。

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

10月23日更新:根据@Lee Johnson的出色建议(请参见下文),现在可以从linux服务器启动同步。为了完整起见,我现在尝试了所有组合,然后出现一个有趣的模式:

在MAC上:

作品:从Mac到Linux的文件

失败:文件从Linux到Mac

在Linux上

作品:文件从Linux到Mac

失败:文件从Mac到Linux

换句话说,该--iconv选项似乎只能以一种方式起作用,文件从本地计算机到远程,而不是另一种方式。在我看来,这似乎是个错误,但也许这就是它应该起作用的方式吗?

任何人都可以分享这个观点吗?


1
rsync在Mac上使用自定义(例如从--rsync-path="/usr/local/bin/rsync"
自家酿制

我被排除.DS_Store在同步之外,因为这个OSX无法删除其中包含这些文件的目录。我使用设置了字符集--iconv,在Mac上使用了rsync路径--rsync-path(我正在使用自制程序),然后必须添加字符集,--delete-excluded以便删除顽固的目录。
丹尼尔(Daniel)

Answers:


12

经过大量的实验,并且在很大程度上是由于@Lee Johnson的有用建议,我终于找到了解决方案,这使我感到非常尴尬。由于我在研究问题时读过评论,所以我认为您应该按转换顺序指定字符集;但似乎这不是正确的语法。相反,应该

始终使用--iconv=utf-8-mac,utf-8初始化从Mac rsync的时候,始终使用--iconv=utf-8,utf-8-mac初始化从Linux机器rsync的时候,不管我想从Mac或Linux的机器同步文件。

然后,它就像魔术一样起作用!


UTF8-MAC是伪字符集,它本身在Linux系统上无法与iconvlib一起使用,即使Ubuntu 14.04 LTS中没有最新的3.1.1版本也是如此。如果您尝试在Linux上启动同步,那将不起作用。
Achim Lammerts '16

5

您最近是否升级到OS X Yosemite?在我记得我用3.1版更新了/ usr / bin / rsync之前,我遇到了同样的问题。当我升级到优胜美地时,它被旧的2.6.9版本取代。

就我自己而言,我通过将3.1 rsync重新链接回/ usr / bin来解决Mac上的问题:

sudo -s
cd /usr/bin
mv rsync rsync-2.6.9
ln -s /usr/local/bin/rsync .
exit

感谢百万,这解决了为什么我得到那个2.6.9的奥秘。信息。(但是,在我的Mac上,Macport的安装版本位于/ opt / local / bin / rsync中,但是将链接更改为该运动很有效。)不幸的是,我想初始化MAC机上的同步,所以这仅对据我所知,我的Linux机器可以弄清楚该怎么做。那么,为什么从Mac初始化时它不起作用?也就是说,“ rsync -av --delete --iconv = utf-8,utf-8-mac mynas:remotedir / localdir /”
Nick The Swede 2014年

我还要说,不幸的是,我的声誉太低,无法为您的有用答案+1,并且由于它仍然无法按我希望的方式工作,因此我无法将其打勾。无论如何,在我的脑海中都是金星(我保证,当我的代表达到15岁以上时,我会回头为你+1)!
瑞典人尼克(Nick The Swede)2014年

您是说即使在运行rsync 3.x的情况下,它在OS X方面仍然不起作用?我认为--iconv2.6.9 不支持该功能。即使rsync只是将选项交付给远程主机进行处理,它也需要在OS X端识别该选项。which rsync; rsync --version从OS X终端告诉您什么?
李·约翰逊

没错 正如您在错误消息中看到的(问题中的第三条灰色引号)所示,它确实识别出我在Mac上使用的是3.1:[Receiver = 3.1.1],并声称不支持该操作,尽管它显然可以工作从Linux端,以及从Mac同步时,将Mac上的文件传输到linux服务器。但是从Mac到Linux,从Mac到Mac的文件不起作用。太奇怪了(至少对我的菜鸟来说)。
瑞典尼克(Nick The Swede)2014年

2
当您从Linux上尝试此操作时,如果强制执行可执行文件路径,例如--rsync-path=/opt/local/bin/rsync在Mac端获得已知的3.1.1版本,会发生什么情况?
李·约翰逊
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.