Lftp est un un programme disponible sous UNIX qui permet de faire des transferts FTP mais également de synchroniser deux répertoires distants.
Prenons l’exemple d’une synchronisation du dossier par défaut d’Apache /var/www/html que l’on voudrait sauvegarder sur un serveur distant dans /var/backups/html
La première étape est de vous connecter à votre serveur distant
lftp
open nom_d_utilisation:mot_de_passe@ip_ou_nom_du_serveur
Si elle n’est pas installée sur votre système vous pouvez l’installer avec yum ou apt par exemple sous Debian:
apt-get update
apt-get install lftp
Une fois connecté vous pouvez lister les fichiers et dossiers présents avec ls pour vérifier que la connexion est correcte.
Pour quitter lftp entrez la commande quit
Maintenant que nous avons vu que la connexion s’effectue comme il faut nous allons nous intéresser à la commande mirror qui va nous permettre de synchroniser deux répertoires.
Elle s’utilise de la façon suivante:
lftp nomdutilisateur:motdepasse@ip -e "mirror /var/www/html /var/backups/html;quit"
Cette commande s’avère très pratique pour effectuer des sauvegardes mais également pour des migrations de serveurs plutôt que de récupérer en local pour renvoyer ensuite sur une autre serveur vous pouvez faire l’opération bien plus rapidement.
La commande mirror propose une multitude de paramètres comme -e pour supprimer les fichiers qui auraient été supprimés de l’hôte distant, -R pour non pas télécharger des fichiers d’un serveur distant mais la de les envoyer vers un autre FTP on inverse alors la commande.
Voici ci-dessous la liste des paramètres issue du site officiel (http://lftp.yar.ru/lftp-man.html )
-c, --continue continue a mirror job if possible
-e, --delete delete files not present at the source
--delete-excluded delete files excluded at the target
--delete-first delete old files before transferring new ones
--depth-first descend into subdirectories before transferring
files
--scan-all-first scan all directories recursively before transfer‐
ring files
-s, --allow-suid set suid/sgid bits according to the source
--allow-chown try to set owner and group on files
--ascii use ascii mode transfers (implies --ignore-size)
--ignore-time ignore time when deciding whether to download
--ignore-size ignore size when deciding whether to download
--only-missing download only missing files
--only-existing download only files already existing at target
-n, --only-newer download only newer files (-c won't work)
--upload-older upload even files older than the target ones
--transfer-all transfer all files, even seemingly the same at the
target site
--no-empty-dirs don't create empty directories (implies
--depth-first)
-r, --no-recursion don't go to subdirectories
--recursion=MODE go to subdirectories on a condition
--no-symlinks don't create symbolic links
-p, --no-perms don't set file permissions
--no-umask don't apply umask to file modes
-R, --reverse reverse mirror (put files)
-L, --dereference download symbolic links as files
--overwrite overwrite plain files without removing them first
--no-overwrite remove and re-create plain files instead of over‐
writing
-N, --newer-than=SPEC download only files newer than specified time
--older-than=SPEC download only files older than specified time
--size-range=RANGE download only files with size in specified range
-P, --parallel[=N] download N files in parallel
--use-pget[-n=N] use pget to transfer every single file
--on-change=CMD execute the command if anything has been changed
--loop repeat mirror until no changes found
-i RX, --include=RX include matching files
-x RX, --exclude=RX exclude matching files
-I GP, --include-glob=GP include matching files
-X GP, --exclude-glob=GP exclude matching files
--include-rx-from=FILE
--exclude-rx-from=FILE
--include-glob-from=FILE
--exclude-glob-from=FILE load include/exclude patterns from the file, one
per line
-f FILE, --file=FILE mirror a single file or globbed group (e.g.
/path/to/*.txt)
-F DIR, --directory=DIR mirror a single directory or globbed group (e.g.
/path/to/dir*)
-O DIR, --target-directory=DIR target base path or URL
-v, --verbose[=level] verbose operation
--log=FILE write lftp commands being executed to FILE
--script=FILE write lftp commands to FILE, but don't execute
them
--just-print, --dry-run same as --script=-
--max-errors=N stop after this number of errors
--skip-noaccess don't try to transfer files with no read access.
--use-cache use cached directory listings
--Remove-source-files remove source files after transfer (use with cau‐
tion)
--Remove-source-dirs remove source files and directories after transfer
(use with caution). Top level directory is not
removed if it's name ends with a slash.
--Move same as --Remove-source-dirs
-a same as --allow-chown --allow-suid --no-umask