Chcę używać rsync do tworzenia kopii zapasowych danych ze zdalnego serwera Linux na moim lokalnym komputerze Mac. Chcę zainicjować tę operację na moim lokalnym komputerze Mac. Wszystko działa dobrze, z wyjątkiem tego, że występuje problem ze znakiem specjalnym: za każdym razem, gdy ponownie uruchamiam operację rsync (po początkowej synchronizacji), pliki ze znakami specjalnymi są najpierw usuwane, a następnie ponownie synchronizowane. O ile rozumiem, istnieje problem z różnymi zestawami znaków i wydaje się , że preferowanym rozwiązaniem jest skorzystanie z --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.
Problem polega na tym, że działa to dla mnie „tylko w jeden sposób”, a mianowicie podczas synchronizacji z Maca na Linuksa. Ale chcę „przejść w drugą stronę”, tj. Zsynchronizować urządzenie Linux z komputerem Mac. Chcę zainicjować operację z mojego lokalnego komputera Mac. Ale kiedy próbuję:
rsync -av --delete --iconv=utf-8,utf-8-mac mynas:remotedir/ localdir/
Otrzymuję 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 to nie działa. Moja wersja rsync na Macu została zaktualizowana z wersji 2.6.9. do 3.1.1. za pomocą Macports . Zauważ, że operacja działa wtedy, gdy I (na Macu, nota bene) zainicjuję rsync Z Maca na Linuksa:
rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
Ale pójście w drugą stronę „z Maca - co chcę robić - nie działa.
O dziwo, testowanie w celu zainicjowania synchronizacji z komputera z systemem Linux 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, uwaga, bardzo dziwne twierdzenie [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?
AKTUALIZACJA 23 października : Według doskonałej sugestii @Lee Johnson (patrz poniżej) inicjowanie synchronizacji z serwera Linux działa teraz. Dla kompletności wypróbowałem teraz wszystkie kombinacje i pojawia się ciekawy wzór:
NA MAC:
DZIAŁA: Pliki z komputera Mac na system Linux
WADY: Pliki z systemu Linux na komputer Mac
NA LINUX
DZIAŁA: Pliki z systemu Linux na komputery Mac
WADY: Pliki z komputera Mac na system Linux
Innymi słowy, --iconv
opcja wydaje się działać tylko w jedną stronę, z plikami z komputera lokalnego do pilota, a nie odwrotnie. Wygląda mi to na błąd, ale może w ten sposób POWINNO działać?
Czy ktoś może się tym podzielić?
.DS_Store
z synchronizacji i z tego powodu OSX nie mógł usunąć katalogów z tymi plikami w środku. Ustawiam zestawy znaków za --iconv
pomocą ścieżki rsync na komputerze Mac z --rsync-path
(używam homebrew), a następnie musiałem dodać, --delete-excluded
aby uparte katalogi mogły zostać usunięte.
rsync
(np. z homebrew) na komputerze Mac i wywoływania go z systemu Linux, konieczne jest określenie poprawnej ścieżki za pomocą--rsync-path="/usr/local/bin/rsync"