Rsync z serwerem Linux: problem ze znakami specjalnymi

4

Mam problem z użyciem rsync do tworzenia kopii zapasowych plików na moim zdalnym komputerze z systemem Linux na komputerze Mac. Za pierwszym razem wszystko jest w porządku, ale najwyraźniej istnieje problem ze znakami specjalnymi między komputerem Mac a Linuxem, ponieważ za każdym razem, gdy uruchamiam operację rsync, pliki ze znakami specjalnymi są najpierw usuwane, a następnie ponownie synchronizowane. Wygląda na to, że występuje problem z różnymi zestawami znaków.

Preferowanym rozwiązaniem wydaje się być użycie --iconvopcji:

Możesz użyć opcji rsync --iconv do konwersji między UTF-8 NFC i NFD, przynajmniej jeśli korzystasz z komputera Mac. Istnieje specjalny zestaw znaków utf-8-mac, który oznacza UTF-8 NFD. Aby skopiować pliki z komputera Mac na serwer NAS, musisz uruchomić coś takiego:

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

Spowoduje to konwersję wszystkich lokalnych nazw plików z UTF-8 NFD na UTF-8 NFC na zdalnym serwerze. Zawartość plików nie zostanie zmieniona.

Brzmi dobrze i dobrze, ale mój Mac nie rozpoznaje tej opcji, ponieważ otrzymuję:

>     MyMachine:~ Macuser$ /usr/bin/rsync -av --delete --iconv=utf-8,utf-8-mac user@linuxmachine:/home/linuxuser/Test/ /Users/Macuser/Test/
>     rsync: --iconv=utf-8,utf-8-mac: unknown option
>     rsync error: syntax or usage error (code 1) at /SourceCache/rsync/rsync-42/rsync/main.c(1333) [client=2.6.9]

Wszelkie sugestie dotyczące tego, co robić?

EDYCJA: wersja rsync na moim Macu to 2.6.9.

Macuser$ rsync --version
rsync  version 2.6.9  protocol version 29

Jeśli ta wersja nie obsługuje tej --iconvopcji, w jaki sposób mogę zaktualizować w bezpieczny sposób?

EDYCJA: W końcu doszedłem do wniosku, że oprócz aktualizacji rsync musiałem również zmienić kolejność, w jakiej określiłem zestawy znaków, więc dodałem odpowiedź poniżej.

Nick Szwed
źródło
Jaką masz wersję rsync
Mark
2.6.9 - patrz edycja.
Nick The Swede

Odpowiedzi:

6

W końcu doszedłem do wniosku, że oprócz aktualizacji rsync musiałem również zmienić kolejność, w której określiłem zestawy znaków: Myślałem, że powinieneś określić zestaw znaków w kolejności transformacji; ale wydaje się, że nie jest to poprawna składnia. Raczej zawsze należy używać --iconv=utf-8-mac,utf-8podczas inicjowania rsync z komputera Mac i zawsze używać --iconv=utf-8,utf-8-macpodczas inicjowania rsync z komputera z systemem Linux, bez względu na to, czy chcę zsynchronizować pliki z komputera z systemem Mac lub Linux.

Wtedy rozwiązanie @ Mark działa jak magia!

Nick Szwed
źródło
3

Argument --iconv został dodany w wersji rsync 3.0.0 ( informacje o wersji ) OSX zapewnia tylko wersję 2.6.9 (patrz strona Apple open source )

Dlatego musisz zdobyć nowszą wersję rsync. Najnowsza wersja to 3.1.2 (wersja 2.6.9 została wydana w 2006 r.)

Dostałbym również nowszą wersję rsync, ponieważ kopiowanie xattr zostało wprowadzone również po wersji 2.6.9

Myślę, że najprostszym sposobem na uzyskanie nowego rsync jest zainstalowanie menedżera pakietów, takiego jak Macports lub Homebrew, a następnie zainstalowanie rsync lub instalacji ze źródła

znak
źródło
Dzięki! Mam teraz wersję 3.1.1 na swoim komputerze Mac, ale nadal mam komunikat o błędzie: obawiam się: iconv_open („UTF-8”, „utf-8-mac”) nie powiódł się błąd rsync: żądane działanie nie jest obsługiwane (kod 4) w rsync.c (118) [nadawca = 3.0.9] rsync: nieoczekiwanie zamknięte połączenie (do tej pory odebrano 0 bajtów) [Odbiornik] błąd rsync: błąd w strumieniu danych protokołu rsync (kod 12) o.c (226) [Odbiornik = 3.1.1] - istnieją oczywiście różne wersje na komputerze zdalnym i lokalnym, ale skoro oba są powyżej wersji 3.0.0, dlaczego to ma takie znaczenie?
Nick The Swede
Przykro mi, ale nie wiem więcej. Utworzyłbym nowe pytanie - prawdopodobnie na SuperUser, ponieważ podejrzewam, że problem nie dotyczy OSX
Mark
Tak zrobię - w każdym razie dziękuję za wybranie mnie w dobrym kierunku!
Nick The Swede
Okazuje się, że oprócz posiadania niewłaściwej wersji rsync na Macu (którą naprawiła twoja aktualizacja rsync), problemem było to, że myślałem, że powinieneś określić zestaw znaków w kolejności transformacji; ale wydaje się, że nie jest to poprawna składnia. Raczej zawsze należy używać --iconv=utf-8-mac,utf-8podczas inicjowania rsync z komputera Mac i zawsze używać --iconv=utf-8,utf-8-macpodczas inicjowania rsync z komputera z systemem Linux, bez względu na to, czy chcę zsynchronizować pliki z komputera z systemem Mac lub Linux. W tej kolejności wszystko było w porządku. To działa jak magia!
Nick The Swede