GNU/Linux >> Znalost Linux >  >> Linux

RSync:Jak mohu synchronizovat v obou směrech?

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.


Linux
  1. Synchronizace adresářů v obou směrech pomocí Rsync?

  2. Jak přejmenovat soubor v Linuxu?

  3. Použití rsync k synchronizaci souborů

  1. Jak používat Rsync k synchronizaci nových nebo změněných/upravených souborů v Linuxu

  2. Jak grep \nv souboru

  3. Jak mohu použít rsync se systémem souborů FAT?

  1. Jak udělat soubor řídký?

  2. Jak RSYNC jeden soubor?

  3. Jak třídit soubor na místě