Rsync ze specjalnymi plikami znaków nie działa między komputerami Mac i Linux

18

Chcę użyć rsync do wykonania kopii zapasowej mojego serwera Ubuntu z dyskiem znajdującym się na komputerze Mac. Ale nie działam poprawnie, ponieważ za każdym razem po ponownym uruchomieniu operacji 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.

Dzięki @Jan zaktualizowałem moją wersję rsync na moim komputerze Mac z wersji 2.6.9. do 3.1.1. Nadal mnie tam nie ma, ponieważ otrzymuję kolejny błąd:

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]

Nie mogę zrozumieć, dlaczego „żądane działanie nie jest obsługiwane”, ponieważ wydaje się, że wersja rsync na moim Ubuntu (12.04) jest po wersji 3.xx, a zatem powinna obsługiwać --iconv opcję.

EDYCJA: Dodaję, że kiedy (na Macu, nota bene) inicjuję rsync Z Maca na Linuksa, wszystko działa doskonale:

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

Ale przejście na drugą stronę z komputera Mac nie działa. O dziwo, testowanie w celu zainicjowania rsync z maszyny linuxowej wyświetla ten dziwny komunikat:

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]

w tym bardzo dziwne roszczenie [server=2.6.9] , chociaż zaktualizowałem do wersji 3.1.1 na Macu. Z niektórych powodów wygląda na to, że moja maszyna linuxowa „widzi” tylko oryginalną wersję rsync na Macu.

Wszelkie sugestie dotyczące rozwiązania tego problemu?

Nick Szwed
źródło

Odpowiedzi:

18

Rozwiązanie było krępująco proste: wiele z uwagi na komentarz, który przeczytałem podczas badania problemu, pomyś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.

To działa jak magia!

EDYCJA: Rzeczywiście, czasem dobrze jest dokładnie sprawdzić stronę podręcznika. Oto czarno na białym:

--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.
Nick Szwed
źródło
Uhm ... mi się to przydarza od Ubuntu do Amazon S3 ...: |
Tom Roggero,
Nieważne! AWS CLI naprawił to dla mnie.
Tom Roggero,
Biały na czarnym;)
Hello World,
3

Mogę potwierdzić, że działa, miałem ten sam problem. W moim przypadku żaden plik z akcentowanym znakiem był nieczytelny w miejscu docelowym. Zauważyłem to, uruchamiając porównanie folderów na komputerze Mac przy użyciu aplikacji Porównaj foldery: https://itunes.apple.com/gb/app/compare-folders/id816042486?mt=12

Dodano powyższe --iconv = utf-8-mac, utf-8 i BOOM! rsync zastąpił każdy akcentowany plik nowym.

Aby dodać pewne informacje, jak się wydaje, powyższe łącza nie działają, zaktualizuj program rsync do wersji 3.1.2, zainstaluj Macports i uruchom: sudo port install rsync

Powodem, dla którego zdalny serwer zwracał wersję 2.6.9, jest fakt, że stara wersja nadal tam jest, a serwer zdalny widzi tę zamiast nowej.

Wersja 2.6.9 znajduje się w / usr / bin

vandit6354
źródło