Nic*_*ede 25 mac backup rsync 12.04
我想使用 rsync 用驻留在 Mac 上的磁盘备份我的 Ubuntu 服务器。但是我没有让它正常工作,因为每次我在初始时间之后重新运行 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]
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么“不支持请求的操作”,因为我的 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/
Run Code Online (Sandbox Code Playgroud)
但是从 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]
Run Code Online (Sandbox Code Playgroud)
包括非常奇怪的声明[server=2.6.9],虽然我已经在 Mac 上更新到 3.1.1。由于某些原因,看起来我的 linux 机器在 Mac 上只能“看到”原始 rsync 版本。
关于如何解决这个问题的任何建议?
Nic*_*ede 26
解决方案非常简单:由于我在研究问题时阅读的评论,我认为您应该按照转换顺序指定字符集;但这似乎不是正确的语法。相反,人们应该总是用--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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26497 次 |
| 最近记录: |