dwukierunkowa synchronizacja z rsync

11

Próbuję ustawić dwukierunkową lub dwukierunkową synchronizację z rsync. W moim przypadku muszę tylko usunąć pliki podczas synchronizacji z B do A. Tak więc myślałem o uruchomieniu rsync dwa razy w następujący sposób:

rsync -rtuv ./A/ ./B/
rsync -rtuv --delete ./B/ ./A/

Ten problem z tym rozwiązaniem polega na tym, że kiedy uruchomię rsync (B-> A), co byłoby zaraz po uruchomieniu rsync (AB), każdy nowy plik utworzony pomiędzy synchronizacją zostanie również usunięty.

Czy istnieje sposób na określenie znacznika czasu jako warunku, że usunie on plik tylko, jeśli został utworzony przed tą datą / godziną.

Zaktualizowano:

Rozumiem, że istnieje rozwiązanie unison, ale problem z unison jest wymagany do instalacji na obu końcach. Synchronizuję się ze zdalnym serwerem i nie mogę zainstalować unisona na zdalnym końcu.

Raza
źródło
Istnieje bardzo podobne pytanie z kilkoma dodatkowymi odpowiedziami tutaj: stackoverflow.com/questions/2936627/two-way-sync-with-rsync
Thomas

Odpowiedzi:

4

Możesz spróbować osync, który jest przeznaczony właśnie do tego zadania. Kiedyś ustawiłem złożoną sekwencję poleceń rsync, aby wykonać to zadanie, ale teraz używam osync.

https://github.com/deajan/osync

Używa rsync wewnętrznie, więc powinno być odpowiednie dla każdej sytuacji, w której możesz użyć rsync.

Mark Perryman
źródło
1
Dzięki, Mark. Właśnie miałem odpowiedzieć na własne pytanie. Znalazłem bardzo podobny skrypt o nazwie bsync ( github.com/dooblem/bsync ), w zasadzie używa diff, aby dowiedzieć się, co należy zsynchronizować. Ponieważ nie oczekuję zsynchronizowanych konfliktów, modyfikuję też nieco ten skrypt, aby działał w trybie cichym, gdy działa z zadaniem cron.
Raza,
7

rsyncjest niewłaściwym narzędziem do tego zadania, z dokładnie takich samych powodów. Zamiast tego rozważ użycie unison:

unison A/ B/

Przy pierwszym uruchomieniu program rozpozna pliki, które są unikatowe A, i te, które są unikatowe B. Będzie również oznaczać te, które są w obu miejscach i prosić o określenie, które mają zostać zastąpione.

Następnym razem, kiedy uruchomić ten będzie skopiować zmiany od Acelu B, a także Bdo A, zgłaszając żadnych plików, które zostały zmienione w obu miejscach do ręcznego rozmiar.

mkdir A B
date > A/date
who > B/who
unison A/ B/
# Lots of output from unison, showing synchronisation

ls A
date    who
ls B
date    who

date > A/date
unison A/ B/
# Lots of output from unison, showing synchronisation

Dostępnych jest wiele przydatnych flag, unisonktóre pomagają zautomatyzować proces poprzez zdefiniowanie założeń, a tym samym zmniejszenie liczby pytań zadawanych podczas synchronizacji.

roaima
źródło
3
Widziałem rozwiązanie unison, ale problem polega na tym, że muszę go zainstalować po obu stronach. Synchronizuję się ze zdalnym i nie mogę zainstalować unisona na zdalnym końcu.
Raza,
1
To nie pomaga OP, ale szukałem jedności . Widzę, że są pakiety Debiana i obsługuje transport ssh.
Ted
1
Istnieją możliwości korzystania z unison bez instalowania go na serwerze, zobacz komentarze w tej odpowiedzi stackoverflow.com/a/2936711, które wskazują i3vi3v.wordpress.com/2013/01/09/…
Thomas
-1

Tak naprawdę potrzebujesz Rclone . Rclone to rsync do przechowywania w chmurze (box, dropbox, nextcloud, ftp itp.) I lokalnego przechowywania.

użytkownik1461607
źródło
2
Jak zainstalowaliby i używali rclone do rozwiązania swojego problemu?
Jeff Schaller
3
rclone nie ma jeszcze synchronizacji dwukierunkowej.
sean