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-8
Mac에서 rsync를 초기화할 때 사용하고언제나--iconv=utf-8,utf-8-mac
Mac 또는 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에 있습니다.