我想使用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
选项似乎只能以一种方式起作用,文件从本地计算机到远程,而不是另一种方式。在我看来,这似乎是个错误,但也许这就是它应该起作用的方式吗?
任何人都可以分享这个观点吗?
.DS_Store
在同步之外,因为这个OSX无法删除其中包含这些文件的目录。我使用设置了字符集--iconv
,在Mac上使用了rsync路径--rsync-path
(我正在使用自制程序),然后必须添加字符集,--delete-excluded
以便删除顽固的目录。
rsync
在Mac上使用自定义(例如从--rsync-path="/usr/local/bin/rsync"