Stačí jej spustit dvakrát, s „novějším“ režimem (příznak -u nebo --update) plus -t (pro zkopírování času změny souboru), -r (pro rekurzivní složky) a -v (pro podrobný výstup, abyste viděli, co to je dělá):
rsync -rtuv /path/to/dir_a/* /path/to/dir_b
rsync -rtuv /path/to/dir_b/* /path/to/dir_a
To nezvládne mazání, ale nejsem si jistý, zda existuje dobré řešení tohoto problému pouze s pravidelnou synchronizací.
Znáte Unison File Synchronizer?
Unison je nástroj pro synchronizaci souborů pro Unix a Windows. Umožňuje, aby byly dvě repliky kolekce souborů a adresářů uloženy na různých hostitelích (nebo na různých discích na stejném hostiteli), upravovány samostatně a poté aktualizovány šířením změn v každé replice na druhou. ...
Všimněte si také, že je odolný proti selhání:
Unison je odolný vůči selhání. Je opatrné ponechat repliky a jejich vlastní soukromé struktury vždy v rozumném stavu, a to i v případě abnormálního ukončení nebo selhání komunikace.
Musíte spustit rsync
dvakrát a doporučuji jej spustit s -au
:
rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source
-a
(a pro archiv) je zkratka pro -rlptgoD
:
-r
Návrat do podadresářů-l
Synchronizujte také symbolické odkazy-p
Synchronizujte také oprávnění k souboru-t
Synchronizujte také časy úprav souborů-g
Synchronizujte také skupiny souborů-o
Synchronizovat také vlastníka souboru-D
Synchronizujte také speciální (nikoli běžné/meta) soubory
V podstatě vždy, když chcete vytvořit identickou kopii jedna ku jedné pomocí rsync
, měli byste vždy používat -a
protože to většina uživatelů očekává, že se stane, když mluví o „synchronizaci ". Jiné odpovědi zde zřejmě přehlížejí, že někdy obsah souboru zůstane nezměněn, ale jeho vlastník se mohl změnit nebo jeho přístupová oprávnění se mohla změnit a v takovém případě rsync
nebude synchronizovat soubor, což by mohlo být fatální.
Ale také potřebujete -u
jak to říká rsync
zcela ponechat jakýkoli soubor/složku na pokoji, pokud již v cíli existuje a má novější datum poslední úpravy. Bez -u
rsync
se synchronizuje bez ohledu na to, zda je soubor/složka novější nebo ne.
Upozorňujeme, že toto řešení nedokáže zpracovat smazané soubory. Zpracování smazaných položek není snadno možné, protože zvažte následující situaci:Soubor byl smazán ve zdroji, jak nyní rsync
vědět, zda tento soubor kdysi existoval a byl smazán (v takovém případě musí být smazán také v cíli) nebo zda nikdy neexistoval ve zdroji (v takovém případě musí být zkopírován z cíle). Tyto dvě situace vypadají stejně jako rsync
nemůže tedy vědět, jak správně reagovat. Nepomůže synchronizace naopak, protože to může vést ke stejné situaci:Soubor existuje ve zdroji, ale ne v cíli. Proč? Nikdy v cíli neexistoval nebo byl smazán? Oba případy vypadají stejně jako rsync
.
Nástroje pro synchronizaci, které dokážou spolehlivě synchronizovat smazané soubory, obvykle spravují protokol synchronizace o všech minulých operacích synchronizace. Pokud tento protokol odhalí, že tam kdysi byl soubor a byl synchronizován, ale nyní chybí, je jasné, že byl smazán. Pokud takový soubor podle protokolu nikdy nebyl, musí být synchronizován. Uložením všech záznamů protokolu s časovými razítky je dokonce možné, že se smazaný soubor vrátí a bude smazán vícekrát, ale synchronizační nástroj bude vždy vědět, co má dělat, a výsledek je vždy správný. rsync
nemá žádný takový protokol, spoléhá se pouze na aktuální stav souboru dvou stran operace.
Můžete si však vytvořit synchronizační příkaz pomocí rsync
a trochu skriptování shellu POSIX, které se již velmi blíží synchronizačnímu nástroji, jak je popsáno výše. Sám jsem takový nástroj potřeboval, zde je odpověď na Stackoverflow, která vás provede vytvořením takového skriptu.