Musisz uruchomić rsync
dwa razy i polecam uruchomić go z -au
:
rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source
-a
(a jak archiwum) to skrót do -rlptgoD
:
-r
Powtarzaj w podkatalogach
-l
Synchronizuj także dowiązania symboliczne
-p
Synchronizuj także uprawnienia do plików
-t
Synchronizuj także czasy modyfikacji plików
-g
Synchronizuj także grupy plików
-o
Synchronizuj także właściciela pliku
-D
Synchronizuj również pliki specjalne (nie zwykłe / meta)
Zasadniczo za każdym razem, gdy chcesz utworzyć identyczną kopię jeden do jednego przy użyciu rsync
, powinieneś zawsze używać -a
tego, ponieważ tego oczekuje większość użytkowników, gdy mówią o „ synchronizacji ”. Inne odpowiedzi wydają się pomijać fakt, że czasami zawartość pliku pozostaje niezmieniona, ale jego właściciel mógł się zmienić lub jego uprawnienia dostępu mogły się zmienić iw takim przypadku rsync
nie zsynchronizowałby pliku, co może być fatalne.
Ale potrzebujesz również, -u
ponieważ to mówi, rsync
aby całkowicie zostawić dowolny plik / folder w spokoju, na wypadek, gdyby istniał już w miejscu docelowym i ma nowszą datę ostatniej modyfikacji. Bez -u
rsync
synchronizacji niezależnie od tego, czy plik / folder jest nowszy, czy nie .
Należy pamiętać, że to rozwiązanie nie obsługuje usuniętych plików. Obsługa usuwania nie jest łatwa, biorąc pod uwagę następującą sytuację: plik został usunięty u źródła, teraz skąd rsync
wiadomo, czy ten plik kiedyś istniał i został usunięty (w takim przypadku należy go również usunąć w miejscu docelowym) lub czy nigdy nie istniał u źródła (w takim przypadku musi zostać skopiowany z miejsca docelowego). Te dwie sytuacje wyglądają identycznie, rsync
więc nie może wiedzieć, jak prawidłowo zareagować. Synchronizacja w drugą stronę nie pomoże, ponieważ może to doprowadzić do tej samej sytuacji: plik istnieje w źródle, ale nie w miejscu docelowym. Czemu? Czy nigdy nie istniał w miejscu docelowym, czy został usunięty? Oba przypadki wyglądają identycznie rsync
.
Narzędzia do synchronizacji, które mogą niezawodnie synchronizować usunięte pliki, zwykle zarządzają dziennikiem synchronizacji o wszystkich wcześniejszych operacjach synchronizacji. Jeśli ten dziennik ujawni, że kiedyś istniał plik i został zsynchronizowany, ale teraz go brakuje, jasne jest, że został usunięty. Jeśli według dziennika nigdy nie było takiego pliku, należy go zsynchronizować. Przechowując wszystkie wpisy dziennika z sygnaturami czasowymi, jest nawet możliwe, że usunięty plik powróci i zostanie usunięty wiele razy, ale narzędzie do synchronizacji zawsze wie, co zrobić, a wynik jest zawsze poprawny. rsync
nie ma takiego dziennika, opiera się tylko na bieżącym stanie pliku po obu stronach operacji.
Możesz jednak zbudować sobie polecenie synchronizacji używając rsync
i trochę skryptów powłoki POSIX, które są już bardzo zbliżone do narzędzia do synchronizacji, jak opisano powyżej. Ponieważ sam potrzebowałem takiego narzędzia, oto odpowiedź na Stackoverflow, która poprowadzi Cię przez tworzenie takiego skryptu.