GNU/Linux >> Linux Esercitazione >  >> Linux

Come sincronizzare file e directory utilizzando Zaloha.sh

Zaloha.sh è un sincronizzatore di directory che si distingue per le sue piccole dimensioni e semplicità. In realtà è uno script BASH . È costituito da un solo file, Zaloha.sh, la cui dimensione è 125 kB . Circa la metà di quel file è la documentazione, l'altra metà è il codice del programma. Zaloha.sh funziona immediatamente. Tuttavia, come script di shell, è facilmente modificabile per creare eventuali soluzioni non standard da esso. Usando Zaloha, possiamo sincronizzare facilmente file e directory su Linux, Unix e Microsoft Windows.

Tieni presente che Zaloha.sh non è ricco di funzionalità come le soluzioni di backup concorrenti, ma tali soluzioni concorrenti sono anche più grandi, più complesse e simili a una scatola nera. Internamente, Zaloha.sh utilizza solo comandi Unix standard, come find, sort, awk, mkdir, rmdir, cp e rm, per farlo funzionare. Zaloha.sh funziona bene in modo nativo sotto Linux, Unix e Windows (Cygwin è richiesto, ovviamente).

Installa il sincronizzatore di directory Zaloha.sh

Installare Zaloha è banale. Basta scaricare il file Zaloha.sh dal repository GitHub e spostarlo nel tuo $PATH, ad esempio /usr/local/bin/ .

Git clone Zaloha repository e sposta il file Zaloha.sh nel tuo $PATH usando i comandi:

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

Infine, rendilo eseguibile:

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

Su Windows, scarica lo script in una directory locale adatta. Ho scelto di metterlo nella directory C:\TOOLS.

Su Windows, come passaggio aggiuntivo, CygWin deve essere installato. Ho già CygWin installato sul mio Notebook. Se non hai ancora installato CygWin, consulta le istruzioni di installazione ufficiali.

Sincronizza file e directory su Linux utilizzando Zaloha.sh

L'utilizzo tipico di Zaloha.sh è il seguente.

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

Lascia che ti mostri un semplice esempio.

Creerò due directory:test1 e test 2 .

$ mkdir test1 test2

Ho due file di testo chiamati file1 e file2 nella directory test1.

$ ls test1/
file1 file2

E la directory test2 è vuota.

Ora sincronizzerò le directory test1 e test2 usando Zaloha:

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

Premi "y" per continuare.

Risultato di esempio:

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/
===========================================

Come puoi vedere nell'output sopra, Zaloha utilizza i comandi Unix standard:trova , difficile , ordina e cp .

Verifichiamo se i file sono stati sincronizzati o meno.

$ ls test1
file1 file2
$ ls test2
file1 file2

Bene, funziona!!

Sincronizzazione su chiavetta USB

I seguenti passaggi sono stati testati su un computer Windows 10, tuttavia la procedura è la stessa per tutti i sistemi operativi.

Ho tutti i miei file di lavoro sul notebook concentrati in una struttura di directory in C:\WORK_DATA . Attualmente contiene diverse migliaia di file di diversi tipi.

Eseguo regolarmente il backup di quella directory su un'unità flash USB (piuttosto vecchia) da 2 GB. Quando collego l'unità flash USB al mio notebook, appare come unità G . La directory di backup sull'unità flash USB è G:\WORK_BACKUP .

Quindi, ora il test vero e proprio:

Recentemente ho partecipato a una riunione con un cliente e ho creato un documento Word Meeting_Notes_0109.docx da. Ho anche modificato un'offerta per quel cliente, che è un foglio di lavoro Excel offer_01.xlsx .

Quindi l'aspettativa è che Zaloha.sh esegua il backup di questi due file, lasciando intatti gli altri file.
Eseguiamo Zaloha.sh per vedere:

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

Risultato di esempio:

Si può vedere che Zaloha.sh esegue Unix find su entrambe le directory C:\WORK_DATA (sotto CygWin /c/WORK_DATA) e G:\WORK_BACKUP (sotto CygWin /cygdrive/g/WORK_BACKUP), quindi esegue diversi passaggi di elaborazione e infine presenta quello che sta per fare, chiedendo conferma.

Il file Meeting_Notes_0109.docx è contrassegnato come NUOVO (in colore nero) e il file offer_01.xlsx è contrassegnato come UPDATE (in colore rosso). Il colore rosso del tag UPDATE avverte l'utente che questa operazione richiede maggiore attenzione, poiché i vecchi dati nella directory di backup verranno sovrascritti.

Dopo aver confermato la richiesta con una "y", Zaloha.sh esegue le operazioni presentate.

Se ora, per curiosità, eseguiamo nuovamente il comando precedente, possiamo vedere che Zaloha.sh esegue i passaggi di analisi e quindi non fa nulla, poiché le directory sono già sincronizzate.

Sincronizzazione inversa

Ora testiamo un'altra funzionalità di Zaloha.sh, una "sincronizzazione inversa" .

Supponiamo di dover, per qualche motivo, lavorare direttamente sull'unità flash USB e voglio che il mio lavoro venga sincronizzato al contrario sul notebook.

Questa funzione deve essere esplicitamente abilitata da --revNew e --revUp opzioni.

L'opzione --revNew indica a Zaloha.sh di copiare nella directory di origine (il notebook) i file nella directory di backup (l'unità USB) che esistono solo nella directory di backup e sono più recenti dell'ultima esecuzione di Zaloha.sh.

L'opzione --revUp indica a Zaloha.sh di copiare nella directory di origine (il notebook) i file nella directory di backup (l'unità USB) che esistono in entrambe le posizioni e i file più recenti si trovano nella directory di backup.

Ora proviamolo. Vado sull'unità flash USB (ad esempio G:\WORK_BACKUP\IKT\2020) e creo un nuovo documento Word denominato Meeting_Notes_0113.docx lì dentro. Successivamente, apro Excel nel file offer_01.xlsx , apporta delle modifiche e salvalo.

Ora eseguiamo Zaloha.sh usando la seguente riga di comando:

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

Si può vedere che Zaloha.sh ha effettivamente sincronizzato al contrario Meeting_Notes_0113.docx e offer_01.xlsx sul taccuino. Anche in questo caso il tag REV.UP di offer_01.xlsx viene visualizzato in rosso, avvertendo l'utente che i dati verranno sovrascritti.

Ulteriori funzionalità

Cosa dovrebbe essere notato ulteriormente:il rilevamento dei file che necessitano di sincronizzazione si basa sui tempi di modifica dei file e sulle dimensioni dei file, che è un metodo usuale utilizzato da molti strumenti di sincronizzazione. Tuttavia, Zaloha.sh è in grado di eseguire il confronto byte per byte anche. Questo può essere attivato da un'opzione della riga di comando.

Sui file system che supportano gli hardlink, Zaloha.sh è in grado di deduplicare gli hardlink e copiare il file hardlink solo una volta nella directory di backup. Anche in questo caso, questo può essere attivato da un'opzione della riga di comando.

Zaloha.sh contiene molte altre opzioni per modificare la sua funzione. Tutti sono descritti nella documentazione. La documentazione dedica anche una discreta quantità di testo alla descrizione del funzionamento interno di Zaloha.sh. Un elemento importante da menzionare qui è che Zaloha.sh crea una directory di lavoro .Zaloha_metadata nella directory di backup, dove conserva i file temporanei e di metadati.

Lettura consigliata:

  • Come sincronizzare directory locali e remote in Linux

Conclusione

Far funzionare Zaloha.sh è davvero facile, specialmente su Linux. Insieme alla sua facile regolazione grazie al fatto di essere uno script di shell, Zaloha.sh potrebbe fornire un valore aggiunto in diverse situazioni immaginabili. Per maggiori dettagli, fare riferimento al repository GitHub Zaloha riportato di seguito. Il repository contiene, oltre a Zaloha.sh stesso, un semplice test case demo, uno screenshot e documentazione online. La documentazione online è la stessa di Zaloha.sh, ma la versione online è in formato HTML ed è più gradevole.

Spero che questo aiuti.


Linux
  1. Come crittografare e decrittografare file e directory utilizzando Tar e OpenSSL

  2. Come sincronizzare le directory usando Lsyncd su Ubuntu 20.04

  3. Come archiviare file e directory in Linux [Parte 2]

  4. Come archiviare file e directory in Linux [Parte 1]

  5. Come comprimere ed estrarre file e directory in Linux usando gzip e bzip2

Come copiare file e directory in Linux

Come spostare file e directory in Linux (comando mv)

Come utilizzare il comando cp per copiare file e directory

Come organizzare e modificare i file PDF utilizzando PDF Arranger

Come eseguire il backup di file e directory utilizzando Rsync in Linux

Come eliminare file e directory utilizzando la riga di comando di Linux