GNU/Linux >> Znalost Linux >  >> Linux

Jak synchronizovat soubory a adresáře pomocí Zaloha.sh

Zaloha.sh je synchronizátor adresářů, který vyniká svou malou velikostí a jednoduchostí. Je to vlastně BASH skript . Skládá se pouze z jednoho souboru, Zaloha.sh, jehož velikost je 125 kB . Přibližně polovina tohoto souboru je dokumentace, druhá polovina je programový kód. Zaloha.sh funguje ihned po vybalení. Jako shell skript je však snadno nastavitelný, aby z něj vytvořil případná nestandardní řešení. Pomocí Zaloha můžeme snadno synchronizovat soubory a adresáře v systémech Linux, Unix a Microsoft Windows.

Vezměte prosím na vědomí, že Zaloha.sh není tak bohatý na funkce jako konkurenční řešení zálohování, ale tato konkurenční řešení jsou také větší, složitější a připomínající blackbox. Interně používá Zaloha.sh pouze standardní unixové příkazy, jako je find, sort, awk, mkdir, rmdir, cp a rm, aby fungoval. Zaloha.sh funguje dobře nativně pod Linuxem, Unixem a Windows (Cygwin je samozřejmě vyžadován).

Nainstalujte Zaloha.sh Directory Synchronizer

Instalace Zaloha je triviální. Stačí stáhnout soubor Zaloha.sh z úložiště GitHub a přesunout jej do vaší $PATH, například /usr/local/bin/ .

Git klon úložiště Zaloha a přesuňte soubor Zaloha.sh do vaší $PATH pomocí příkazů:

$ git clone https://github.com/Fitus/Zaloha.sh.git
$ sudo mv Zaloha.sh/Zaloha.sh /usr/local/bin/zaloha.sh

Nakonec jej udělejte spustitelným:

$ sudo chmod +x /usr/local/bin/zaloha.sh

V systému Windows stáhněte skript do vhodného místního adresáře. Rozhodl jsem se umístit jej do adresáře C:\TOOLS.

V systému Windows jako další krok CygWin musí být nainstalováno. CygWin už mám na svém notebooku nainstalovaný. Pokud jste CygWin ještě nenainstalovali, přečtěte si prosím oficiální instalační pokyny.

Synchronizujte soubory a adresáře v systému Linux pomocí Zaloha.sh

Typické použití Zaloha.sh je následující.

$ zaloha.sh --sourceDir=<path_to_dir> --backupDir=<path_to_dir>

Dovolte mi ukázat vám jednoduchý příklad.

Vytvořím dva adresáře a to test1 a test 2 .

$ mkdir test1 test2

Mám dva textové soubory s názvem file1 a soubor 2 v adresáři test1.

$ ls test1/
file1 file2

A adresář test2 je prázdný.

Nyní se chystám synchronizovat adresáře test1 a test2 pomocí Zaloha:

$ zaloha.sh --sourceDir=test1/ --backupDir=test2/ --color

Stiskněte "y" pokračovat.

Ukázkový výstup:

ANALYZING ./test1/ AND ./test2/
===========================================
Parsing .............................................. done.
find ./test2/.Zaloha_metadata/ -path ./test2/.Zaloha_metadata/999_mark_executed -printf '///\tL\t%y\t%s\t%Ts\t%F\t%D\t%i\t%n\t%u\t%g\t%m\t%P\t///\t%l\t///\n'
find ./test1/ -path ./test1/.Zaloha_metadata -prune -o -ipath './test1/$RECYCLE.BIN' -prune -o -path './test1/.Trash-[0-9]*' -prune -o -path ./test1/lost+found -prune -o -printf '///\tS\t%y\t%s\t%Ts\t%F\t%D\t%i\t%n\t%u\t%g\t%m\t%P\t///\t%l\t///\n'
find ./test2/ -path ./test2/.Zaloha_metadata -prune -o -ipath './test2/$RECYCLE.BIN' -prune -o -path './test2/.Trash-[0-9]*' -prune -o -path ./test2/lost+found -prune -o -printf '///\tB\t%y\t%s\t%Ts\t%F\t%D\t%i\t%n\t%u\t%g\t%m\t%P\t///\t%l\t///\n'
Cleaning ............................................. done.
Checking ............................................. done.
Sorting (2) .......................................... done.
Differences processing ...............................
Zaloha AWK: Warning: No last run of Zaloha found (this is OK if this is the first run)
done.
Sorting (3) .......................................... done.
Post-processing and splitting off Exec1 and Exec4 .... done.
Sorting (4) and selecting Exec2 ...................... done.
Preparing shellscript for Exec1 ...................... done.
Preparing shellscript for Exec2 ...................... done.
Preparing shellscript for Exec4 ...................... done.
Preparing shellscript to touch file 999 .............. done.
Preparing shellscripts for case of restore ........... done.

TO BE COPIED TO ./test2/
===========================================
NEW file1
NEW file2

Execute above listed copies to ./test2/ ? [Y/y=Yes, other=do nothing and abort]: y

cp --preserve=timestamps ./test1/file1 ./test2/file1
cp --preserve=timestamps ./test1/file2 ./test2/file2

TO BE REMOVED FROM ./test2/
===========================================

Jak můžete vidět na výše uvedeném výstupu, Zaloha používá standardní unixové příkazy - find , awk , řadit a cp .

Pojďme zkontrolovat, zda byly soubory synchronizovány nebo ne.

$ ls test1
file1 file2
$ ls test2
file1 file2

No, funguje to!!

Synchronizace s USB flash diskem

Následující kroky byly testovány na počítači s Windows 10, ale postup je stejný pro všechny operační systémy.

Všechny své pracovní soubory v notebooku mám soustředěné v adresářové struktuře pod C:\WORK_DATA . V současné době obsahuje několik tisíc souborů různých typů.

Pravidelně zálohuji tento adresář na (dost starý) 2 GB USB flash disk. Když připojím tento USB flash disk k notebooku, zobrazí se jako disk G . Záložní adresář na USB flash disku je G:\WORK_BACKUP .

Takže, nyní skutečný test:

Nedávno jsem byl na schůzce se zákazníkem a vytvořil jsem dokument Word Meeting_Notes_0109.docx z toho. Také jsem upravil nabídku pro tohoto zákazníka, což je excelová tabulka offer_01.xlsx .

Očekává se tedy, že Zaloha.sh provede zálohu těchto dvou souborů, přičemž ostatní soubory zůstanou nedotčeny.
Spusťte Zaloha.sh, abyste viděli:

$ /c/TOOLS/Zaloha.sh --sourceDir="/c/WORK_DATA" --backupDir="/cygdrive/g/WORK_BACKUP" --color

Ukázkový výstup:

Je vidět, že Zaloha.sh spouští Unix find na obou adresářích C:\WORK_DATA (pod CygWin /c/WORK_DATA) a G:\WORK_BACKUP (pod CygWin /cygdrive/g/WORK_BACKUP), poté provede několik kroků zpracování a nakonec prezentuje, co se chystá udělat, a žádá potvrzení.

Soubor Meeting_Notes_0109.docx je označen jako NEW (černě) a soubor offer_01.xlsx je označen jako AKTUALIZACE (červeně). Červená barva značky UPDATE upozorňuje uživatele, že tato operace vyžaduje větší pozornost, protože stará data v adresáři zálohy budou přepsána.

Po potvrzení výzvy pomocí „y“ provede Zaloha.sh uvedené operace.

Pokud nyní ze zvědavosti spustíme výše uvedený příkaz znovu, uvidíme, že Zaloha.sh provede kroky analýzy a poté neudělá nic, protože adresáře jsou již synchronizovány.

Reverzní synchronizace

Pojďme nyní otestovat další funkci Zaloha.sh, "reverzní synchronizaci" .

Předpokládejme, že jsem z nějakého důvodu musel pracovat přímo na USB flash disku a chci, aby se moje práce zpětně synchronizovala zpět do notebooku.

Tato funkce musí být výslovně povolena --revNew a --revUp možnosti.

Možnost --revNew přikazuje Zaloha.sh zkopírovat do zdrojového adresáře (notebooku) soubory v adresáři zálohy (na USB disku), které existují pouze v adresáři zálohy a jsou novější než poslední spuštění Zaloha.sh.

Možnost --revUp přikazuje Zaloha.sh zkopírovat do zdrojového adresáře (notebooku) soubory v záložním adresáři (na USB disku), které existují v obou umístěních a novější soubory jsou v záložním adresáři.

Pojďme to nyní otestovat. Přejdu na USB flash disk (tj. G:\WORK_BACKUP\IKT\2020) a vytvořím nový dokument aplikace Word s názvem Meeting_Notes_0113.docx tam. Dále otevřu Excel na souboru offer_01.xlsx , proveďte nějaké úpravy a uložte jej.

Nyní spusťte Zaloha.sh pomocí následujícího příkazového řádku:

$ /c/TOOLS/Zaloha.sh --sourceDir="/c/WORK_DATA" --backupDir="/cygdrive/g/WORK_BACKUP" --color --revNew --revUp

Je vidět, že Zaloha.sh skutečně zpětně synchronizoval Meeting_Notes_0113.docx a offer_01.xlsx zpět do notebooku. Značka REV.UP souboru offer_01.xlsx je opět zobrazena červeně a upozorňuje uživatele, že data budou přepsána.

Další funkce

Co je třeba dále poznamenat:Detekce souborů, které vyžadují synchronizaci, je založena na časech úprav souborů a velikosti souborů, což je obvyklá metoda používaná mnoha synchronizačními nástroji. Zaloha.sh je však schopen provádět porovnání bajtů po byte také. To lze aktivovat volbou příkazového řádku.

Na souborových systémech, které podporují pevné odkazy, je Zaloha.sh schopen deduplikovat pevné odkazy a zkopírovat soubor s pevným odkazem pouze jednou do záložního adresáře. Opět to lze aktivovat volbou příkazového řádku.

Zaloha.sh obsahuje několik dalších možností pro úpravu jeho funkce. Vše je popsáno v dokumentaci. Dokumentace také věnuje slušné množství textu popisu vnitřního fungování Zaloha.sh. Zde je třeba zmínit jednu důležitou věc, a to, že Zaloha.sh vytváří pracovní adresář .Zaloha_metadata v adresáři záloh, kde uchovává své dočasné soubory a soubory metadat.

Doporučené čtení:

  • Jak synchronizovat místní a vzdálené adresáře v systému Linux

Závěr

Uvedení Zaloha.sh do práce je skutečně snadné, zvláště na Linuxu. Spolu se svou snadnou nastavitelností díky tomu, že jde o skript shellu, může Zaloha.sh přinést přidanou hodnotu v několika představitelných situacích. Další podrobnosti naleznete v níže uvedeném úložišti Zaloha GitHub. Úložiště obsahuje kromě samotného Zaloha.sh také jednoduchý ukázkový testovací případ, snímek obrazovky a online dokumentaci. Online dokumentace je stejná jako dokumentace v Zaloha.sh, ale online verze je ve formátu HTML a je hezčí.

Doufám, že to pomůže.


Linux
  1. Jak šifrovat a dešifrovat soubory a adresáře pomocí Tar a OpenSSL

  2. Použití rsync k synchronizaci souborů

  3. Jak komprimovat a extrahovat soubory a adresáře v Linuxu pomocí gzip a bzip2

  1. Jak synchronizovat adresáře pomocí Lsyncd na Ubuntu 20.04

  2. Jak archivovat soubory a adresáře v Linuxu [část 2]

  3. Jak archivovat soubory a adresáře v Linuxu [část 1]

  1. Jak kopírovat soubory a adresáře v Linuxu

  2. Jak odstranit adresáře a soubory pomocí Linuxu

  3. Jak synchronizovat místní a vzdálené adresáře v Linuxu