Mac 上的 rsync –iconv 選項不起作用(從遠端 Linux 伺服器同步到本地 Mac)
我想使用 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 機器同步文件。然後它就像魔術一樣工作!