Ceci est une ancienne révision du document !
Cette page décrit comment synchroniser un répertoire avec lftp.
Installer le paquet lftp.
lftp ne nécessite pas de configuration mais il est possible de simplifier son utilisation avec des bookmark.
Utilisation : bookmark [SOUS-COMMANDE] La commande bookmark contrôle les signets Les sous-commandes suivantes sont valides : add <nom> [<url>] - ajoute l'url en cours ou l'url indiquée aux signets et l'associe au nom donné del <nom> - supprime le signet edit - démarre l'éditeur de signets import <type> - importe un fichier de signets externe list - affiche les signets (par défaut)
exemple :
lftp :/> bookmark add site.com ftp://user:pass@ftp.site.com lftp :/> bookmark list site.com ftp://user:XXXX@ftp.site.com lftp :/>
Il est ensuite possible d'utiliser ces bookmark avec la commande “connect” ou directement à partir de la ligne de commande :
lftp site.com
Avant d'automatiser toute synchronisation, il est conseillé de faire quelques tests manuellement.
En cas d'erreur, le risque est de supprimer l'ensemble des fichiers sources.
La synchronisation est réalisée avec la commande mirror :
lftp matthieu@gandalf.bouthors.fr:/> help mirror Utilisation : mirror [OPTS] [distant [local]] Duplique le répertoire distant spécifié vers le répertoire local -c, --continue continue, si c'est possible, un travail de duplication -e, --delete efface les fichiers absents sur le site distant --delete-first efface les anciens fichiers avant d'en transférer de nouveaux -s, --allow-suid duplique aussi les bits suid/sgid --allow-chown essaye de dupliquer aussi les propriétaires --ignore-time ignore l'heure pour décider ou non du téléchargement -n, --only-newer télécharge uniquement les nouveaux fichiers -r, --no-recursion n'entre pas dans les sous-répertoires -p, --no-perms ne définit pas les permissions de fichier --no-umask n'applique pas umask aux modes de fichier -R, --reverse duplication inversée (émet les fichiers) -L, --dereference télécharge les liens symboliques comme des fichiers -N, --newer-than=SPEC télécharge uniquement les fichiers plus jeunes que la date et l'heure spécifiées par SPEC -P, --parallel[=N] télécharge N fichiers en parallèle -i RX, --include RX inclut les fichiers correspondant à RX -x RX, --exclude RX exclut les fichiers correspondant à RX RX est une expression régulière étendue -v, --verbose[=N] mode volubile --log=FILE écrit dans FILE les commandes exécutées par lftp --script=FILE écrit dans FILE les commandes à exécuter par lftp mais ne les exécute pas. --just-print, --dry-run identique à --script=- Lorsque vous utilisez -R, le premier répertoire est local et le second est distant. Si le second répertoire est omis, le nom de base du premier est utilisé. Si les deux répertoires sont omis, les répertoires courants local et distant sont utilisés.
Il est fortement recommandé d'utiliser l'option –dry-run pour les essais.
Voici un exemple de synchronisation par download :
mirror /Data/Photos /data/transfert/photos -v --log /var/log/lftp/download_nas --parallel=10 --no-perms -e
Voici un exemple de synchronisation en upload :
mirror -R /space/Videos/ /data/videos/ --ignore-time --no-perms -e -v
En upload, il n'est pas possible de modifier l'heure des fichiers destinations et souvent les permissions également, c'est pourquoi il est recommander de les désactiver.
Lorsque la commande désirée est finalisée, il est possible de la copier dans un fichier pour faire un script lftp.
Par exemple :
connect nas mirror /Data/Photos /data/transfert/photos -v --log /var/log/lftp/download_nas --parallel=10 --no-perms -e
Il suffit ensuite d'exécuter le script avec l'option -f de lftp.
Pour automatiser cela, voici un petit script qui exécute un fichier de commande lftp.
Ce script exécute lftp en tâche de fond comme un daemon et permet de l'arrêter ou le redémarrer.
Pour utiliser le script, il faut :
Ce script dispose des options suivantes :
Script :
#!/bin/sh # Quick start-stop-daemon example, derived from Debian /etc/init.d/ssh set -e # Must be a valid filename NAME=lftp_synchro PIDFILE=/var/run/$NAME.pid #This is the command to be run, give the full pathname DAEMON=/usr/bin/lftp DAEMON_OPTS="-f /chemin/vers/cmd.lftp" export PATH="${PATH:+$PATH:}/usr/sbin:/sbin" # check if lftp is running RUNNING=false if [ -e $PIDFILE ] then currentpid=`cat $PIDFILE` if `ps -p $currentpid > /dev/null` then RUNNING=true else rm -f $PIDFILE fi fi case "$1" in start) date if $RUNNING then started=`date -r $PIDFILE` echo "daemon $NAME already started since $started, you need to stop it first" else echo -n "Starting daemon: "$NAME start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $DAEMON -- $DAEMON_OPTS echo "." fi ;; stop) date echo -n "Stopping daemon: "$NAME start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE rm -f $PIDFILE echo "." ;; restart) date echo -n "Restarting daemon: "$NAME if $RUNNING then start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE rm -f $PIDFILE fi start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $DAEMON -- $DAEMON_OPTS echo "." ;; check) if $RUNNING then echo "$NAME is running" else echo "$NAME is not running" fi ;; *) echo "Usage: "$1" {start|stop|restart|check}" exit 1 esac exit 0