Synchroniser deux répertoires distants par FTP
On connait tous rsync qui permet de synchroniser deux répertoires en faisant des sauvegardes incrémentielles. Cette synchronisation est unidirectionnelle; il y a un répertoire source et un répertoire de destination. Malheureusement, rsync ne fonctionne pas en FTP. Mais heureusement, dans la panoplie des outils pour Linux, il existe une application qui est capable de synchroniser deux répertoires via FTP: lftp.
lftp est un client FTP très évolué. Il s’utilise en ligne de commande et son gros avantage est sa capacité de faire du mirroring. Le mirroring consiste à comparer deux répertoires et à les synchroniser pour qu’ils soient identiques. lftp est capable de synchroniser un répertoire distant avec un répertoire local ou, l’inverse, synchroniser un répertoire local avec un répertoire distant. La différence réside dans le fait que dans le premier cas, la source est le répertoire local et dans le second, la source est le répertoire distant.
La commande de base si on veut que la source soit le répertoire local est :
lftp ftp://login:password@host -c "mirror --delete --reverse --exclude-glob dossier_à_exclure /répertoire_local /répertoire_distant"
Dans le cas où on veut une synchro du répertoire local avec comme source le répertoire distant, on supprime l’option –reverse.
l’option -c de lftp permet de donner à lftp un ensemble de commandes. Elle doivent être entre guillemets et séparées par des points-virgules. Notez aussi que l’option –exclude-glob peut être insérée plusieurs fois s’il y a plusieurs répertoires ou fichiers à exclure. Cette option accepte les wildcards (*,?). Je ne vais pas détailler toutes les commandes mais sachez que les commandes classiques de FTP sont reconnues (cd, lcd, get, mmet, put, mput,…). Je vous conseille la lecture de la page de manuel pour toutes les options et possibilités de ce programme.
Evidemment, lftp est particulièrement bien adapté à son utilisation au sein d’un script. A titre d’exemple, voici un petit script bash appelé ftpsync qui synchronise un répertoire distant à partir d’un répertoire local:
#!/bin/bash # # Synchronise deux répertoires en utilisant FTP HOST="ftp.votre_site.com" LOGIN="votre_login" PASSWORD="mot_de_passe" LOCALDIR="$1" REMOTEDIR="/" EXCLUDED="*.*~" function Usage() { echo -e "n Synchronise un répertoire local avec un répertoire distant en utilisant FTP"; echo -e "n USAGE: ftpsync local_dir"; echo; } if [ "$LOCALDIR" = "" ] then echo -e " ERREUR: Veuillez spécifier un répertoire local"; Usage; exit 1; fi if [ -e "$LOCALDIR" ] then lftp -c "set ftp:list-options -a; open ftp://$LOGIN:$PASSWORD@$HOST; lcd $LOCALDIR; cd $REMOTEDIR; mirror --reverse --delete --verbose --exclude-glob $EXCLUDED"; fi
A l’heure où on parle de plus en plus de cloud computing, où il est facile de se procurer des zones de stockage sur Internet gratuitement comme DropBox, UbuntuOne ou autre SpiderOak, synchroniser deux répertoires par FTP peut sembler anachronique mais lftp peut encore rendre de grands services pour faire, par exemple, des backups de votre site web distants sur votre PC en local.
0 commentaire