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 --iconv
opcji:
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 --iconv
opcji, 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.
Odpowiedzi:
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-8
podczas inicjowania rsync z komputera Mac i zawsze używać--iconv=utf-8,utf-8-mac
podczas 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!
źródło
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
źródło
--iconv=utf-8-mac,utf-8
podczas inicjowania rsync z komputera Mac i zawsze używać--iconv=utf-8,utf-8-mac
podczas 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!