This is an old revision of the document!
This page talk about folder synchronization with lftp.
Install lftp package.
There is no specific configuration to do but bookmarks can simplify the use of lftp.
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)
Example :
lftp :/> bookmark add site.com ftp://user:pass@ftp.site.com lftp :/> bookmark list site.com ftp://user:XXXX@ftp.site.com lftp :/>
It's possible to use bookmarks with the “connect” command or directly on the command line :
lftp site.com
Before automatic synchronization, it's advised to do some tests manually.
Be carreful, there is a risk to delete source file by mistakes.
Synchronization is done with “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.
The option –dry-run is usefull to make some tests without risks.
Some example of synchronisation (download) :
mirror /Data/Photos /data/transfert/photos -v --log /var/log/lftp/download_nas --parallel=10 --no-perms -e
Another example (upload) :
mirror -R /space/Videos/ /data/videos/ --ignore-time --no-perms -e -v
When uploading, it is not possible to set the date/time on the files uploaded, that's why –ignore-time is needed.
When the complete command is defined, it's possible to use it inside an lftp script.
Example :
connect nas mirror /Data/Photos /data/transfert/photos -v --log /var/log/lftp/download_nas --parallel=10 --no-perms -e
To use the script, launch lftp with -f option.
To run automaticaly the synchronization, please find below a small batch that will launch lftp.
lftp is started in background like a daemon.
To use the script, you need to :
The script has the following options :
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