Lftp transfert de fichiers pour Unix

Version 1.1 par Mélodie le 2026/04/01 08:03

Manuel de lftp

lftp est un logiciel de transfert de fichiers en ligne de commande. Il est puissant et fiable, et très utile dans le contexte de la gestion de serveurs distants. Il supporte les protocoles FTP, HTTP, FISH, SFTP, HTTPS et FTPS.

Il vient avec un fichier de configuration /etc/lftp.conf que l'on peut utiliser comme base pour une personnalisation. Il contient de nombreux exemples commentés.

Le fichier de configuration personnel doit être créé sous $HOME/.config/lftp/. Voici un exemple de fichier lftp.conf personnalisé:

# Pour plus d'options vérifier les commentaires dans le fichier /etc/lftp.conf
# set ftp:ssl-allow false
# set xfer:clobber "on"
set ssl:verify-certificate no
set ftp:ssl-force yes
set ftp:anon-pass "mozilla@"

La documentation officielle se trouve sur https://lftp.yar.ru/

Commandes de base

FTP

lftp ftp://login@ip       # connexion à la racine du serveur
lftp ftp://login@ip:/repertoire-cible  # connexion directe répertoire destination
lftp ftp://login@ip/repertoire-cible  # idem sans le signe ':'

Le mot de passe est demandé interactivement après connexion.

SFTP

Pareil que ci-dessus, mais avec lftp sftp://…

Commandes de navigation et d'information

pwd          # affiche le répertoire courant (distant)
lpwd         # affiche le répertoire courant (local)
ls           # liste les fichiers distants
lcd          # affiche le répertoire local courant en essayant de changer de répertoire local
!ls          # liste les fichiers locaux (! = exécution locale)
cd repertoire    # change de répertoire distant
lcd repertoire   # change de répertoire local

Transferts de fichiers

get <fichier>                        # télécharge le fichier distant choisi dans le répertoire local courant
get <fichier> -o /chemin/local/      # télécharge le fichier distant choisi vers un répertoire local spécifique
put <fichier>                        # envoie le fichier local choisi vers le répertoire distant courant
mget <fichier1 fichier2 fichier3>   # télécharge plusieurs fichiers choisis dans le répertoire local courant
mput <fichier1 fichier2 fichier3>   # envoie plusieurs fichiers choisis vers le répertoire distant courant

Transferts de répertoires complets

Connecté au serveur :

lftp login@serveur:/repertoire> mirror <dossier-distant> <dossier-local/>   # télécharge un répertoire complet dans le répertoire local courant
lftp login@serveur:/repertoire> mirror --reverse <dossier-local/> <dossier-distant>   # envoie le contenu d'un répertoire local complet vers le serveur distant
lftp login@serveur:/repertoire> mirror --reverse <dossier-local> <dossier-distant>   # envoie un répertoire local complet vers le serveur distant

mirror --continue                    # reprend un transfert interrompu
mirror --delete                      # supprime à la destination ce qui n'existe plus à la source
mirror --parallel=4                  # transferts parallèles

Transferts parallèles

--parallel=N lance N transferts simultanément au lieu d'un seul à la fois. Utile pour les répertoires avec beaucoup de petits fichiers → au lieu d'attendre que chaque fichier soit terminé avant de passer au suivant, lftp en transfère plusieurs en même temps.

Connecté au serveur :

lftp login@serveur:/repertoire> mirror --parallel=4 <dossier-distant/> <dossier-local/>

=>le prompt est bloqué jusqu'à la fin du transfert.

Dans lftp interactif, lancer un mirror en arrière-plan :

lftp login@serveur:/repertoire> mirror --parallel=4 <dossier-distant/> <dossier-local/> &

=> avec le signe '&' le prompt revient immédiatement, le transfert continue en arrière-plan. On peut continuer à taper des commandes selon le besoin.

Divers

jobs         # affiche les transferts en cours
wait         # attend la fin des transferts en cours
queue        # met des commandes en file d'attente
exit / quit  # quitte lftp

Divers - Utilisation concrète

jobs, wait et queue sont utiles quand on lance un transfert en tâche de fond depuis le prompt lftp, pour continuer à naviguer pendant ce temps :

jobs        # voir l'état du transfert en cours  
wait        # bloquer jusqu'à ce que le transfert soit terminé  
queue permet d'enchaîner des commandes qui s'exécuteront l'une après l'autre :  
queue mirror /rep1/ /dest1/  
queue mirror /rep2/ /dest2/  
queue mirror /rep3/ /dest3/  
wait

Lftp exécute les trois mirrors séquentiellement sans intervention.

Mettre chaque queue en arrière-plan si on ne veut pas employer "wait"

queue mirror /rep1/ /dest1/ &  
queue mirror /rep2/ /dest2/ &  
queue mirror /rep3/ /dest3/ &

/!\  là les trois tournent en parallèle simultanément : Si les trois destinations sont sur le même serveur risque de satureration de la connexion et/ou refus du serveur FTP /!\

=> wait après les queues est recommandé en cas de transferts vers le même serveur.

Transferts de répertoires complets : syntaxe et options

Depuis le prompt lftp, déjà connecté au serveur source :

mirror repertoire-source/ /chemin/local/repertoire-destination/

ou

mirror repertoire-source /chemin/local/

=> La présence du slash final / détermine le résultat

À garder en tête pour la lecture des exemples suivants :

  • Avec repertoire-source/ le contenu du répertoire est copié dans la destination, mais pas le répertoire lui-même.
  • Avec repertoire-source le répertoire complet est copié dans la destination, contenu inclus.
  • Le signe ~/ pour "home" sera à adapter en fonction de votre cas
  • Préférez toujours vous déplacer dans le répertoire de travail, qu'il soit local ou distant

Depuis le terminal bash, non connecté, récupère le contenu complet du répertoire distant: lftp -e "mirror <sftp://login:mdp@serveur:/repertoire-source/> /repertoire-local/destination/ ; quit"

Options

  • --reverse : inverse le sens du transfert : envoie du local vers le distant

Ex : mirror --reverse ~/repertoire-local/ repertoire-distant/

  • --continue : reprend un transfert interrompu, ne retransfère que ce qui manque ou a été modifié

Ex : mirror --continue ~/repertoire-source/ /repertoire-local/destination/

  • --delete : supprime à la destination les fichiers qui n'existent plus à la source — à utiliser avec précaution

Ex : mirror --delete ~/repertoire-source/ /repertoire-local/destination/

--parallel=N : lance N transferts simultanément — utile pour les répertoires contenant de nombreux petits fichiers

Ex : mirror --parallel=4 ~/repertoire-source/ /repertoire-local/destination/

--verbose : affiche chaque fichier transféré au fur et à mesure

Ex : mirror --verbose ~/repertoire-source/ /repertoire-local/destination/

--log=fichier.log : enregistre les opérations effectuées dans un fichier : /!\ ne capture pas les erreurs (utiliser la redirection 2>&1 pour cela) /!\

Ex : mirror --log=transfert.log ~/repertoire-source/ /repertoire-local/destination/

Mirroring entre deux serveurs distants

Transfert direct d'un serveur vers un autre, sans passer par le local. La commande s'écrit en une seule ligne depuis le terminal bash, avec les deux URIs complètes — le premier argument est la source, le second est la destination :

lftp -e "mirror --continue --verbose <sftp://login:mdp@serveur1/repertoire-source/> <ftp://login:mdp@serveur2/repertoire-destination/> ; quit"

Les protocoles source et destination peuvent être différents (sftp, ftp, ftps) — lftp gère la conversion de façon transparente.

/!\ Les mots de passe apparaissent en clair dans la ligne de commande /!\

Pour éviter l'enregistrement dans l'historique bash, préfixer la commande d'un espace. Cela nécessite que HISTCONTROL soit défini à ignorespace ou ignoreboth :

lftp -e "mirror --continue --verbose <sftp://login:mdp@serveur1/repertoire-source/> <ftp://login:mdp@serveur2/repertoire-destination/> ; quit"

Le slash final sur les deux URIs est important : il garantit que le contenu du répertoire source va dans le répertoire destination, et non que le répertoire source est recréé à l'intérieur.

Différence entre ; quit et && quit :

  • ; quit : quitte dans tous les cas en fin de transfert
  • && quit : ne quitte que si le mirror s'est terminé sans erreur

Sans --delete, le mirror est additif : il n'efface rien à la destination.

Pour capturer les erreurs dans un fichier log, rediriger stdout et stderr :

lftp -e "mirror --continue --verbose sftp://login:mdp@serveur1/repertoire-source/ ftp://login:mdp@serveur2/repertoire-destination/ && quit" > transfert.log 2>&1

Quitter la connexion

lftp login@serveur:/repertoire> bye

ou quitou exit


Le man ne mentionne pas bye, il ne documente que exit et quit implicitement via « ftp:use-quit ».

Ce que le man dit sur exit : si des jobs sont en arrière-plan, exit détache lftp du terminal et le fait continuer en arrière-plan (comportement similaire à nohup) plutôt que de tout tuer : les transferts continuent.

Par ailleurs exit kill force l'arrêt de tous les jobs avant de quitter.

À vérifier : bye pourrait être un alias de exit ou de quit hérité de la tradition FTP (les serveurs FTP répondent souvent bye à la déconnexion), mais le man ne le distingue pas.