Mac과 Linux간에 특수 문자 파일이 작동하지 않는 Rsync


18

rsync를 사용하여 Mac에있는 디스크로 Ubuntu 서버를 백업하고 싶습니다. 그러나 초기 시간 후에 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로 변환됩니다. 파일 내용은 영향을받지 않습니다.

@Jan 덕분에 Mac의 rsync 버전을 2.6.9에서 업데이트했습니다 . 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]

내 우분투 (12.04)의 rsync 버전이 3.xx 이후이므로 --iconv옵션을 지원해야하기 때문에 "요청 된 작업이 지원되지 않는 이유"를 이해하지 못했습니다 .

편집 : 내가 (맥이 아닌) Mac에서 Linux로 rsync를 시작할 때 모든 것이 훌륭하게 작동한다는 것을 추가하겠습니다.

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

그러나 Mac에서 다른 방법으로 이동하면 작동하지 않습니다. 이상하게도 리눅스 머신에서 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]

[server=2.6.9]Mac에서 3.1.1로 업데이트되었지만 매우 이상한 주장을 포함합니다 . 어떤 이유로 든 내 리눅스 컴퓨터는 Mac의 원래 rsync 버전 만 '인식'합니다.

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

답변:


18

해결책은 매우 간단했습니다. 문제를 조사 할 때 읽은 의견으로 인해 문자 집합을 변환 순서대로 지정해야한다고 생각했습니다. 그러나 올바른 구문이 아닌 것 같습니다. 오히려 사람이해야 항상 사용하는 --iconv=utf-8-mac,utf-8맥에서 rsync를 초기화하는 경우, 그리고 항상 사용하는 --iconv=utf-8,utf-8-mac리눅스 시스템에서 rsync를 초기화하는 경우에 상관없이 나는 맥 또는 리눅스 컴퓨터에서 동기화 파일을 원하는 경우.

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

편집 : 실제로, 때로는 매뉴얼 페이지를 면밀히 확인하는 것이 좋습니다. 여기는 흰색 바탕에 검은 색입니다.

--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.

음 ... 우분투에서 Amazon S3까지 나에게 일어나고 있습니다 ... : |
톰 로게로

신경 쓰지 마! AWS CLI가 해결했습니다.
Tom Roggero

Black on White;)
Hello World

3

나는 이것이 효과가 있음을 확인할 수 있는데, 같은 문제가 있었다. 필자의 경우 악센트 문자가있는 파일을 대상에서 읽을 수 없었습니다. 폴더 비교 응용 프로그램을 사용하여 Mac에서 폴더 비교를 실행하여 발견했습니다. https://itunes.apple.com/gb/app/compare-folders/id816042486?mt=12

위의 --iconv = utf-8-mac, utf-8 및 BOOM을 추가했습니다! rsync는 모든 강조된 파일을 새 것으로 바꿨습니다.

위의 링크가 더 이상 작동하지 않는 것처럼 정보를 추가하려면 rsync를 3.1.2로 업그레이드하려면 Macports를 설치하고 다음을 실행하십시오. sudo port install rsync

원격 서버가 버전 2.6.9를 반환하는 이유는 이전 버전이 실제로 존재하고 원격 서버가 새 버전 대신 해당 버전을보고 있기 때문입니다.

버전 2.6.9는 / usr / bin에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.