Linux

Mac 上的 rsync –iconv 選項不起作用(從遠端 Linux 伺服器同步到本地 Mac)

  • July 21, 2021

我想使用 rsync 將數據從遠端 Linux 伺服器備份到本地 Mac。我想在我的本地 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。文件的內容不會受到影響。

問題是這對我來說只有“一種方式”,即從 Mac 同步到 linux 時。但我想“走另一條路”,即從 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 到 Linux 的 rsync 時,該操作將起作用:

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選項似乎只能以一種方式工作,文件從本地機器到遠端,而不是相反。對我來說它看起來像一個錯誤,但也許這就是它應該工作的方式?

任何人都可以分享這一點?

經過大量的實驗,並且非常感謝@Lee Johnson 的有用建議,我終於找到了解決方案,現在讓我感到尷尬的是顯而易見的。很大程度上由於我在研究問題時閱讀的評論,我認為您應該按照轉換順序指定字元集;但這似乎不是正確的語法。而是應該

--iconv=utf-8-mac,utf-8從 mac 初始化 rsync 時總是使用,--iconv=utf-8,utf-8-mac從 linux 機器初始化 rsync 時總是使用,無論我是想從 mac 還是 linux 機器同步文件。

然後它就像魔術一樣工作!

引用自:https://serverfault.com/questions/638316