Archives quotidiennes :

Comment synchro­ni­ser des réper­toires FTP avec lftp ?

Lftp est un un programme dispo­nible sous UNIX qui permet de faire des trans­ferts FTP mais égale­ment de synchro­ni­ser deux réper­toires distants.

Prenons l’exemple d’une synchro­ni­sa­tion du dossier par défaut d’Apache /var/www/html que l’on voudrait sauve­gar­der sur un serveur distant dans /var/backups/html

La première étape est de vous connec­ter à votre serveur distant

lftp
open nom_d_utilisation:[email protected]_ou_nom_du_serveur

Si elle n’est pas instal­lée sur votre système vous pouvez l’ins­tal­ler 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éri­fier que la connexion est correcte.

Pour quit­ter lftp entrez la commande quit

Main­te­nant que nous avons vu que la connexion s’ef­fec­tue comme il faut nous allons nous inté­res­ser à la commande mirror qui va nous permettre de synchro­ni­ser deux réper­toires.

Elle s’uti­lise de la façon suivante:

lftp nomdutilisateur:[email protected] -e "mirror  /var/www/html /var/backups/html;quit"

Cette commande s’avère très pratique pour effec­tuer des sauve­gardes mais égale­ment pour des migra­tions de serveurs plutôt que de récu­pé­rer en local pour renvoyer ensuite sur une autre serveur vous pouvez faire l’opé­ra­tion bien plus rapi­de­ment.

La commande mirror propose une multi­tude de para­mètres comme -e pour suppri­mer les fichiers qui auraient été suppri­més de l’hôte distant, -R pour non pas télé­char­ger 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 para­mètres issue du site offi­ciel (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