Sincronizzare una cartella locale con una cartella su un server FTP

Autore:[Antonio Gallonetto]

Prendendo come esempio l’articolo sulla criptazione delle password nel terminale, di seguito uno script per la sincronizzazione di una cartella dal computer locale ad un ftp remoto.

La nostra fonte principale è questo articolo AskUbuntu nonostante sia pensato per Linux funziona tranquillamente su Mac e gli altri sistemi unix-like, purchè si possa installare lftp.

Quindi per prima cosa è necessario installare lftp

A questo punto è necessario generare una password criptata, si può vedere questo articolo per i dettagli

#!/bin/bash
echo "inserisci frase da criptare"
read frase
echo $frase | openssl enc -aes-256-cbc -a 

Supponiamo che la stringa generata sia la seguente:

U2FsdGVkX18g7yJSzXjsewvUVe3bDMHn6Bm7LimoQz8=

Il codice per la sincronizzazione di una cartella da locale a quella remota attraverso il protocollo di comunicazione ftp, potrebbe essere il seguente:

#!/bin/bash
rhost='mysite.com'
ruser='myuser'
rpass='U2FsdGVkX18g7yJSzXjsewvUVe3bDMHn6Bm7LimoQz8='
sourcefolder='/home/myuser/backups'
remotefolder='/new'

newpass=echo $PASS| openssl enc -aes-256-cbc -d -a 

lftp -f "
open $rhost
user $ruser $newpass
lcd $sourcefolder
mirror --reverse --delete --verbose $sourcefolder $remotefolder
bye
"

Attenzione le virgolette dopo il comando lftp -f sono corrette, perchè qui si inizia a dialogare con il server FTP.

Salviamo il codice all’interno di un file di testo, ad esempio ftp_mirror.sh

Rendiamo lo script eseguibile con il seguente comando:
sudo chmod +x ftp_mirror.sh

Nell’articolo originale, avevamo la sincronizzazione automatica attraverso il comando cron, in questo caso non la possiamo fare, perchè dobbiamo inserire la nostra password per decriptare la nostra password oscurata. Quindi per la sincronizzazione dobbiamo avviare manualmente di volta in volta lo script ftp_mirror.sh.

Un piccolo dettaglio di stile, il codice originale che si trova su askubuntu, riporta il seguente codice:

#!/bin/bash
HOST='mysite.com'
USER='myuser'
PASS='myuser'
TARGETFOLDER='/new'
SOURCEFOLDER='/home/myuser/backups'

lftp -f "
open $HOST
user $USER $PASS
lcd $SOURCEFOLDER
mirror --reverse --delete --verbose $SOURCEFOLDER $TARGETFOLDER
bye
"

Per abitudine i nomi di variabile li indico sempre in minuscolo per distinguerli da quelli di sistema. In questo caso ho cercato anche di evitare possibili conflitti di variabili utilizzando rhost, ecc.
Questa però è solo una questione di abitudine, seguire delle convenzioni precise ci permette di poter rileggere il codice molto più facilmente anche dopo molto tempo.
Scrivendo questa parte ho fatto una piccola ricerca ed ho trovato questo articolo riguardante le convenzioni molto interessante: Lettere maiuscole corrette di script Bash e shell