我正在嘗試在 Linux 機器和 MacOS 機器之間進行 rsync。
MacOS (yosemite) 似乎附帶了舊版的 rsync,所以我使用自製程式更新了它。好吧,我似乎有完美匹配的版本:
wim@wim-imac:~$ rsync --version | head -n 1
rsync version 3.1.1 protocol version 31
wim@wim-imac:~$ ssh wim@wim-dell
wim@wim-dell:~$ rsync --version | head -n 1
rsync version 3.1.1 protocol version 31
如果它是從 MacOS 盒子“拉”(即目的地是本地而源是遠端),那麼它可以工作:
wim@wim-imac:~$ rsync -nvvvv wim@wim-dell:/media/wim/wim_2tb/guitar /Volumes/wim2TB/guitar | grep Protocol
(Server) Protocol versions: remote=31, negotiated=31
(Client) Protocol versions: remote=31, negotiated=31
但如果它從來源盒子(linux)推送到 Mac,現在就會出現一個小問題 - 協定不匹配。
wim@wim-imac:~$ ssh wim@wim-dell
wim@wim-dell:~$ rsync -nvvvv /media/wim/wim_2tb/guitar wim@wim-imac:/Volumes/wim2TB/guitar | grep Protocol
(Server) Protocol versions: remote=31, negotiated=29
(Client) Protocol versions: remote=29, negotiated=29
所以這個症狀是因為我們已經協商了最低公分母協議 29,所以我沒有得到支持,--iconv
並且任何帶有有趣字符的文件名都會被搞砸。
wim@desk35:~$ rsync -nv --iconv=UTF-8,UTF8-MAC /media/wim/wim_2tb/guitar wim@wim-imac:/Volumes/wim2TB/guitar
rsync: on remote machine: --iconv=UTF8-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(226) [sender=3.1.1]
我使用 , 尋找rsyncd
可能在 Mac 上運行的任何類型的踢ps aux
,ps -ef
但我找不到它。
為什麼 mac 機器在遠端連線時選擇舊協定版本,如何讓它使用我安裝的較新版本的 rsync?
答案1
我猜 rsync 的自製版本位於 /usr/local/bin 而不是 /usr/bin (應該是這樣),但是當從 Linux 盒子進行 rsync 時,它會執行 /usr/bin/rsync 作為遠端代理。如果這是問題所在,您應該能夠透過新增--rsync-path=/usr/local/bin/rsync
(或 OS X 端的實際路徑)來修復它。
注意:請不要替換 /usr/bin 目錄中 Apple 提供的 rsync 版本——那樣會造成瘋狂。