Mam folder a / i folder zdalny A /. Teraz uruchamiam coś takiego na pliku Makefile:
get-music:
rsync -avzru server:/media/10001/music/ /media/Incoming/music/
put-music:
rsync -avzru /media/Incoming/music/ server:/media/10001/music/
sync-music: get-music put-music
kiedy tworzę muzykę do synchronizacji, najpierw pobiera wszystkie różnice z serwera na lokalny, a następnie odwrotnie, wysyłając wszystkie różnice z lokalnego na serwer.
Działa to bardzo dobrze tylko wtedy, gdy w przyszłości są tylko aktualizacje lub nowe pliki. Jeśli są skreślenia, to nic nie robi.
W rsync są opcje --delete i --delete-after, które pomagają osiągnąć to, co chcę, ale rzecz jest taka, że nie działa przy synchronizacji dwukierunkowej.
Jeśli chcę usunąć pliki serwera na synchronizacji, gdy pliki lokalne zostały usunięte, działa, ale jeśli z jakiegoś powodu (wyjaśnione poniżej) mam pliki, których nie ma na serwerze, ale istnieją lokalnie i zostały usunięte, Chcę je lokalnie usunąć, a nie skopiować na serwer (tak się dzieje).
Chodzi o to, że mam 3 maszyny w kontekście:
- pulpit
- notatnik
- serwer domowy
Dlatego czasami serwer będzie miał pliki, które zostały usunięte podczas synchronizacji notatnika, a następnie, kiedy uruchomię synchronizację z moim komputerem (gdzie usunięte pliki serwera nadal istnieją), chcę, aby te pliki zostały usunięte, a nie skopiowany ponownie na serwer.
Myślę, że jest to możliwe tylko z bazą danych i śledzeniem operacji: P
Jakieś prostsze rozwiązania? Dziękuję Ci.
Odpowiedzi:
Wypróbuj Unison: http://www.cis.upenn.edu/~bcpierce/unison/
Składnia:
unison dirA/ dirB/
Unison pyta, co zrobić, gdy pliki są różne, ale możesz zautomatyzować ten proces, używając następujących opcji, które akceptują domyślne (niesprzeczne) opcje:
unison -auto dirA/ dirB/
unison -batch dirA/ dirB/
nie zadaje żadnych pytań i wypisuje, ile plików zostało zignorowanych (ponieważ były w konflikcie).źródło
:)
Możesz także wypróbować bitpocket: https://github.com/sickill/bitpocket
źródło
Możesz użyć Osync: http://www.netpower.fr/osync , który jest oparty na rsync z inteligentną propagacją usuwania. ma również wiele opcji, takich jak wznawianie zatrzymanego wykonywania, miękkie usuwanie i kontrola czasu.
źródło
Ponieważ pierwotne pytanie dotyczy również komputera stacjonarnego i laptopa oraz przykładu z plikami muzycznymi (stąd prawdopodobnie używa GUI), wspomniałbym również o jednym z najlepszych dwukierunkowych, wieloplatformowych, bezpłatnych i otwartych programów do tej pory: FreeFileSync .
Oparty na graficznym interfejsie użytkownika, bardzo szybki i intuicyjny, zawiera filtrowanie i wiele innych opcji, w tym możliwość zdalnego łączenia się, przeglądania i interaktywnego zarządzania „kolizjami” (na przykład plików z podobnymi sygnaturami czasowymi) oraz przełączania między transferami dwukierunkowymi, dublowaniem wkrótce.
źródło
Spróbuj tego,
Po prostu to testuję i zadziałało. Robię dwukierunkową synchronizację pomiędzy Windows7 (używając cygwin z zainstalowanym pakietem rsync) a serwerem plików FreeNAS (FreeNAS działa na FreeBSD z preinstalowanym pakietem rsync).
źródło
-u
pomija pliki nowsze w miejscu docelowym, ale rsync nie ma sposobu śledzenia wieku usunięcia, więc jak ten skrypt może rozróżnić, kiedy plik lokalny jest nowy (i powinien zostać zachowany) lub stary (i powinien zostać usunięty) ? A może nie rozumiem?--delete-excluded
usuwa wszystkie pliki, które istnieją w katalogach docelowych, ale nie w katalogach źródłowych? Myślałem, że musisz zdefiniować,--exclude=<filename>
więc czy rsync nie usunie tylko tych wykluczeń? A może rsync traktuje wszystkie pliki katalogów niebędące źródłami jako „wykluczenia”?--delete-excluded
jest uruchamiany z serwerem jako źródłem w pierwszej kolejności: pliki dodane lokalnie zostaną usunięte podczas tego uruchomienia (podczas gdy pliki dodane do serwera są kopiowane do lokalnego miejsca docelowego). Jedynymi plikami lokalnymi zsynchronizowanymi z powrotem z serwerem są pliki, które również istnieją na serwerze i zostały zmodyfikowane lokalnie (później niż wersje serwerowe) - co nie jest prawdopodobne w scenariuszu OP. Jak sugerujesz, wydaje mi sięrsync
, że nie można wykonać prawdziwej dwukierunkowej synchronizacji , ponieważ wymagane jest zapisywanie stanu między uruchomieniami.Możesz spróbować csync , jest to silnik synchronizacji pod maską owncloud .
źródło
Teraz używam SparkleShare https://www.sparkleshare.org/
działa na mac, linux i windows.
źródło
Nie jestem pewien, czy działa to z dwiema synchronizacjami, ale aby --delete działało, musisz również dodać parametr --recursive.
źródło
--recurse
jest-r
, co PO jest za pomocą (wbudowany w grupie sprężonego opcji-avzru
).Możesz użyć Cloudync, aby zachować synchronizację folderu z pilotem:
Jeśli pilot to NFS, możesz użyć:
źródło
Rclone jest tym, czego szukasz. Rclone („rsync do przechowywania w chmurze”) to program wiersza poleceń do synchronizowania plików i katalogów z różnymi dostawcami pamięci masowej w chmurze, w tym z lokalnymi systemami plików. Rclone był wcześniej znany jako Swiftsync i jest dostępny od 2013 roku.
źródło