带有特殊字符文件的Rsync在Mac和Linux之间不起作用


18

我想使用rsync用Mac上的磁盘备份Ubuntu服务器。但是我无法使其正常工作,因为每次在初始时间之后每次重新运行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。文件内容不会受到影响。

感谢@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上,不是一个人)在Mac上启动rsync到Linux时,一切工作都非常出色:

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

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

Answers:


18

解决方案非常简单:在研究问题时,由于我读了一条评论,我认为您应该按转换顺序指定字符集;但似乎这不是正确的语法。相反,人们应该总是--iconv=utf-8-mac,utf-8初始化从Mac rsync的时候,和总是使用--iconv=utf-8,utf-8-mac初始化从Linux机器rsync的时候,不管我想从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, e.g.  --iconv=utf8,iso88591.   This  order
              ensures  that the option will stay the same whether you're push-
              ing  or  pulling  files.

嗯...从Ubuntu到Amazon S3都在我身上...:|
汤姆·罗杰罗

没关系!AWS CLI为我修复了它。
汤姆·罗杰罗

白底黑字;)
Hello World

3

我可以确认这项工作有效,但我遇到了同样的问题。就我而言,任何带有重音符号的文件在目标位置均不可读。我只是通过使用“比较文件夹”应用程序在Mac上运行文件夹比较来发现它的:https : //itunes.apple.com/gb/app/compare-folders/id816042486?mt=12

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

要添加一些似乎上述链接不再起作用的信息,请将rsync升级到3.1.2,安装Macports并运行:sudo port install rsync

之所以看到远程服务器返回版本2.6.9,是因为旧版本实际上仍然存在,并且远程服务器看到的是旧版本而不是新版本。

版本2.6.9位于/ usr / bin中

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.