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.


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!


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.