Mac에서 rsync --iconv 옵션이 작동하지 않음 (원격 Linux 서버에서 로컬 Mac으로 동기화)


9

rsync를 사용하여 원격 Linux 서버에서 로컬 Mac으로 데이터를 백업하고 싶습니다. 그리고 로컬 Mac에서이 작업을 초기화하고 싶습니다. 특수 문자 문제가 있다는 점을 제외하고는 모두 정상적으로 작동합니다. (초기 동기화 후) rsync 작업을 다시 실행할 때마다 특수 문자가있는 파일이 먼저 삭제 된 다음 다시 동기화됩니다. 내가 이해하는 한, 다른 문자 세트에 문제가 있으며 선호되는 해결책--iconv옵션 을 사용하는 것 같습니다 .

rsync의 --iconv 옵션을 사용하여 최소한 Mac을 사용하는 경우 UTF-8 NFC와 NFD간에 변환 할 수 있습니다. UTF-8 NFD를 나타내는 특수한 utf-8-mac 문자 세트가 있습니다. 따라서 Mac에서 NAS로 파일을 복사하려면 다음과 같이 실행해야합니다.

rsync -a --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/

이렇게하면 모든 로컬 파일 이름이 UTF-8 NFD에서 원격 서버의 UTF-8 NFC로 변환됩니다. 파일 내용은 영향을받지 않습니다.

문제는 이것이 Mac에서 Linux로 동기화 할 때 나에게만 '일방적'으로 작동한다는 것입니다. 그러나 나는 다른 방향으로 가고 싶다. 즉 리눅스 머신에서 맥으로 동기화하고 싶다. 로컬 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에서 Linux로 rsync를 시작하면 작업이 작동합니다.

rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/

그러나 Mac에서 다른 방향으로 나아가는 것은 작동하지 않습니다.

이상하게도 리눅스 머신에서 동기화를 시작하는 테스트는 다음과 같은 이상한 메시지를 렌더링합니다.

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로 업데이트되었지만 매우 이상한 주장 을 포함합니다. 어떤 이유로 든 내 리눅스 컴퓨터는 Mac의 원래 rsync 버전 만 '인식'합니다.

이 문제를 해결하는 방법에 대한 제안이 있으십니까?

업데이트 10 월 23 일 : @ Lee Johnson의 훌륭한 제안 (아래 참조)에 따라 Linux 서버에서 동기화가 시작됩니다. 완성을 위해 모든 조합을 시도했으며 흥미로운 패턴이 나타납니다.

MAC에서 :

작품 : Mac에서 Linux 로의 파일

실패 : Linux에서 Mac으로의 파일

리눅스에서

작동 : Linux에서 Mac으로의 파일

실패 : Mac에서 Linux 로의 파일

다시 말해, --iconv옵션은 로컬 시스템에서 원격으로 파일을 이동시키는 한 가지 방법으로 만 작동하는 것 같습니다. 그것은 나에게 버그처럼 보이지만 아마도 그것이 작동하는 방식일까요?

누구든지 이것에 빛을 공유 할 수 있습니까?


1
rsyncmac에서 사용자 정의 (예 : homebrew에서)를 사용하고 Linux에서 호출 할 때--rsync-path="/usr/local/bin/rsync"
meduz

.DS_Store동기화 에서 제외 하고이 OSX로 인해이 파일이있는 디렉토리를 삭제할 수 없습니다. 문자 세트를로 설정 --iconv하고 Mac에서 rsync 경로를 --rsync-path(homebrew를 사용하고 있음)으로 설정 한 다음 --delete-excluded완고한 디렉토리를 삭제할 수 있도록 추가 해야했습니다.
Daniel

답변:


12

많은 실험을 거친 후 @Lee Johnson의 유용한 제안으로 인해 마침내 해결책을 찾았습니다. 문제를 조사 할 때 읽은 의견으로 인해 변환 순서에 따라 문자 집합을 지정해야한다고 생각했습니다. 그러나 올바른 구문이 아닌 것 같습니다. 오히려, 하나는

항상 사용하는 --iconv=utf-8-mac,utf-8사용 항상 맥에서 rsync를 초기화하는 경우, 그리고 --iconv=utf-8,utf-8-mac리눅스 머신에서 rsync를 초기화하는 경우에 상관없이 나는 맥 또는 리눅스 컴퓨터에서 동기화 파일을 원하는 경우.

그러면 마법처럼 작동합니다!


UTF8-MAC는 의사 문자 세트이며 Linux 시스템에서 iconvlib와 함께 사용할 수 없으며 Ubuntu 14.04 LTS의 최신 3.1.1 버전에서도 사용할 수 없습니다. Linux에서 동기화를 시작하려고 시도하면 작동하지 않습니다.
Achim Lammerts 2016 년

5

최근에 OS X Yosemite로 업그레이드 했습니까? / usr / bin / rsync를 버전 3.1로 업데이트 한 것을 기억하기 전에 같은 문제가있었습니다. Yosemite로 업그레이드하면 이전 2.6.9 버전으로 바뀌 었습니다.

필자의 경우 3.1 rsync를 다시 / usr / bin으로 다시 연결하여 Mac에서 문제를 해결했습니다.

sudo -s
cd /usr/bin
mv rsync rsync-2.6.9
ln -s /usr/local/bin/rsync .
exit

왜 내가 2.6.9를 얻었는지에 대한 수수께끼를 해결하는 백만 감사합니다. 메시지. (내 Mac에서는 Macport 설치 버전이 / opt / local / bin / rsync에 있지만 해당 스포츠 링크를 변경하면 마술처럼 작동합니다.) 불행히도 MAC 컴퓨터에서 동기화를 초기화하고 싶기 때문에 도움이됩니다. 내 리눅스 머신이 무엇을해야하는지 알 수있는 한. Mac에서 초기화 할 때 왜 작동하지 않습니까? 즉, "rsync -av --delete --iconv = utf-8, utf-8-mac mynas : remotedir / localdir /"
Nick The Swede

불행히도 나는 당신의 도움이되는 답변을 +1 할 수있는 평판이 너무 낮으며, 여전히 내가 원하는 방식으로 작동하지 않기 때문에 해결할 수 없습니다. 어쨌든 내 마음에 금색 별 (그리고 나는 내 담당자가 15 이상에 도달하자마자 돌아가서 +1을 약속드립니다!)
Nick The Swede

rsync 3.x를 실행하더라도 OS X에서 여전히 작동하지 않는다고 말하는가? 나는 그것이 --iconv2.6.9에서 지원 되지 않는다고 생각한다 . rsync가 처리를 위해 원격 호스트로 옵션을 제공하는 경우에도 OS X 측의 옵션을 인식해야합니다. which rsync; rsync --versionOS X 터미널에서 무엇을 알려줍니까?
Lee Johnson

맞습니다. 오류 메시지 (질문의 세 번째 회색 인용 부호)에서 볼 수 있듯이, Mac에서 3.1을 사용하고 있음을 인식합니다. [Receiver = 3.1.1] Mac에서 Mac의 파일을 Linux 서버로 동기화 할 때 뿐만 아니라 Linux 측에서도 . 그러나 Mac에서 Linux에서 Mac으로의 파일은 작동하지 않습니다. 너무 이상합니다 (적어도 멍청한 눈에는).
Nick The Swede

2
Linux 에서이 작업을 시도 할 때 --rsync-path=/opt/local/bin/rsyncMac 측에서 알려진 3.1.1 버전을 얻는 것과 같은 실행 경로를 강제 실행하면 어떻게됩니까 ?
Lee Johnson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.