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

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

rsync를 사용하여 Mac에 있는 디스크로 Ubuntu 서버를 백업하고 싶습니다. 그런데 초기 시간 이후에 rsync 작업을 다시 실행할 때마다 특수 문자가 포함된 파일이 먼저 삭제된 후 다시 동기화되기 때문에 제대로 작동하지 않습니다. 다른 문자 집합에 문제가 있는 것 같습니다.

그만큼선호하는 솔루션다음 옵션을 사용하는 것 같습니다 --iconv.

적어도 Mac을 사용하는 경우 rsync의 --iconv 옵션을 사용하여 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]

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

편집: 내가(베네가 아니라 Mac에서) Mac에서 Linux로 rsync를 시작하면 모든 것이 훌륭하게 작동한다는 점을 추가하겠습니다.

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

그러나 Mac에서 다른 방향으로 가는 것은 작동하지 않습니다. 이상하게도 Linux 시스템에서 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로 업데이트했지만 매우 이상한 주장도 포함됩니다 . 어떤 이유로 내 Linux 시스템은 Mac의 원래 rsync 버전만 '인식'하는 것처럼 보입니다.

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

답변1

해결책은 당황스러울 정도로 간단했습니다. 문제를 조사할 때 읽은 의견 때문에 변환 순서에 따라 문자 집합을 지정해야 한다고 생각했습니다. 하지만 그것은 올바른 구문이 아닌 것 같습니다. 오히려,언제나--iconv=utf-8-mac,utf-8Mac에서 rsync를 초기화할 때 사용하고언제나--iconv=utf-8,utf-8-macMac 또는 Linux 컴퓨터에서 파일을 동기화하려는 경우 Linux 컴퓨터에서 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.

답변2

이것이 작동하는지 확인할 수 있지만 동일한 문제가 발생했습니다. 내 경우에는 악센트 문자가 있는 파일을 대상에서 읽을 수 없었습니다. 저는 Mac에서 Compare Folders 애플리케이션을 사용하여 폴더 비교를 실행해야만 이 사실을 발견했습니다. 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에 있습니다.

관련 정보