Version 3.2 par Mélodie le 2026/04/01 13:10

Afficher les derniers auteurs
1 # Manuel de lftp
2
3 **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.
4
5 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.
6
7 Le fichier de configuration personnel doit être créé sous `$HOME/.config/lftp/`. Voici un exemple de fichier lftp.conf personnalisé:
8
9 ```
10 # Pour plus d'options vérifier les commentaires dans le fichier /etc/lftp.conf
11 # set ftp:ssl-allow false
12 # set xfer:clobber "on"
13 set ssl:verify-certificate no
14 set ftp:ssl-force yes
15 set ftp:anon-pass "mozilla@"
16 ```
17
18 La documentation officielle se trouve sur <https://lftp.yar.ru/>
19
20 <div style="height:1.5em;"></div>
21
22 # Commandes de base
23
24 ## FTP
25
26 * `lftp <ftp://login@ip>` # connexion à la racine du serveur
27 * `lftp <ftp://login@ip:/repertoire-cible>` # connexion directe répertoire destination
28 * `lftp <ftp://login@ip/repertoire-cible>` # idem sans le signe ':'
29
30 Le mot de passe est demandé interactivement après connexion.
31
32 <div style="height:1.5em;"></div>
33
34 ## SFTP
35
36 Pareil que ci-dessus, mais avec `lftp sftp://…`
37
38 <div style="height:1.5em;"></div>
39
40 ## Commandes de navigation et d'information
41
42 * `pwd` # affiche le répertoire courant (distant)
43 * `lpwd` # affiche le répertoire courant (local)
44 * `ls` # liste les fichiers distants
45 * `lcd` # affiche le répertoire local courant en essayant de changer de répertoire local
46 * `!ls` # liste les fichiers locaux (! = exécution locale)
47 * `cd repertoire` # change de répertoire distant
48 * `lcd repertoire` # change de répertoire local
49
50 <div style="height:1.5em;"></div>
51
52 ## Transferts de fichiers
53
54 * `get <fichier>` # télécharge le fichier distant choisi dans le répertoire local courant
55 * `get <fichier> -o /chemin/local/` # télécharge le fichier distant choisi vers un répertoire local spécifique
56 * `put <fichier>` # envoie le fichier local choisi vers le répertoire distant courant
57 * `mget <fichier1 fichier2 fichier3…>` # télécharge plusieurs fichiers choisis dans le répertoire local courant
58 * `mput <fichier1 fichier2 fichier3…>` # envoie plusieurs fichiers choisis vers le répertoire distant courant
59
60 <div style="height:1.5em;"></div>
61
62 ## Transferts de répertoires complets
63
64 Connecté au serveur :
65
66 * `lftp login@serveur:/repertoire> mirror <dossier-distant> <dossier-local/>` # télécharge un répertoire complet dans le répertoire local courant
67 * `lftp login@serveur:/repertoire> mirror --reverse <dossier-local/> <dossier-distant>` # envoie le contenu d'un répertoire local complet vers le serveur distant
68 * `lftp login@serveur:/repertoire> mirror --reverse <dossier-local> <dossier-distant>` # envoie un répertoire local complet vers le serveur distant
69
70 <div style="height:1em;"></div>
71
72 * `mirror --continue` # reprend un transfert interrompu
73 * `mirror --delete` # supprime à la destination ce qui n'existe plus à la source
74 * `mirror --parallel=4` # transferts parallèles
75
76 <div style="height:1.5em;"></div>
77
78 ### Transferts parallèles
79
80 --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.
81
82 Connecté au serveur :
83
84 lftp login@serveur:/repertoire> mirror --parallel=4 <dossier-distant/> <dossier-local/>
85
86 =>le prompt est bloqué jusqu'à la fin du transfert.
87
88 <div style="height:1.5em;"></div>
89
90 Dans lftp interactif, lancer un mirror en arrière-plan :
91
92 lftp login@serveur:/repertoire> mirror --parallel=4 <dossier-distant/> <dossier-local/> &
93
94 => avec le signe '&' le prompt revient immédiatement, le transfert continue en arrière-plan. On peut continuer à taper des commandes selon le besoin.
95
96 <div style="height:1.5em;"></div>
97
98 ## Divers
99
100 * `jobs` # affiche les transferts en cours
101 * `wait` # attend la fin des transferts en cours
102 * `queue` # met des commandes en file d'attente
103 * `exit / quit` # quitte lftp
104
105 <div style="height:1.5em;"></div>
106
107 ### Divers - Utilisation concrète
108
109 _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 :
110
111 * `jobs` # voir l'état du transfert en cours
112 * `wait` # bloquer jusqu'à ce que le transfert soit terminé
113
114 _queue_ permet d'enchaîner des commandes qui s'exécuteront l'une après l'autre :
115
116 * `queue mirror /rep1/ /dest1/`
117 * `queue mirror /rep2/ /dest2/`
118 * `queue mirror /rep3/ /dest3/`
119 * `wait`
120
121 Ci-dessus lftp exécute les trois _mirrors_ séquentiellement sans intervention.
122
123 <div style="height:1.5em;"></div>
124
125 Mettre chaque queue en arrière-plan si on ne veut pas employer "wait" :
126
127 * `queue mirror /rep1/ /dest1/ &`
128 * `queue mirror /rep2/ /dest2/ &`
129 * `queue mirror /rep3/ /dest3/ &`
130
131 /!\  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 /!\
132
133 => wait après les queues est recommandé en cas de transferts vers le même serveur.
134
135 <div style="height:1.5em;"></div>
136
137 ## Transferts de répertoires complets : syntaxe et options
138
139 Depuis le prompt lftp, déjà connecté au serveur source :
140
141 mirror repertoire-source/ /chemin/local/repertoire-destination/
142
143 ou
144
145 mirror repertoire-source /chemin/local/
146
147 => La présence du slash final `/` détermine le résultat
148
149 <div style="height:1.5em;"></div>
150
151 À garder en tête pour la lecture des exemples suivants :
152
153 * Avec `repertoire-source/` le contenu du répertoire est copié dans la destination, mais pas le répertoire lui-même.
154 * Avec `repertoire-source` le répertoire complet est copié dans la destination, contenu inclus.
155 * Le signe `~/` pour "home" sera à adapter en fonction de votre cas
156 * Préférez toujours vous déplacer dans le répertoire de travail, qu'il soit local ou distant
157
158 <div style="height:1.5em;"></div>
159
160 Depuis le terminal bash, non connecté, récupère le contenu complet du répertoire distant:
161
162 lftp -e "mirror <sftp://login:mdp@serveur:/repertoire-source/> /repertoire-local/destination/ ; quit"
163
164 <div style="height:1.5em;"></div>
165
166 ### Options
167
168 * `--reverse` : inverse le sens du transfert : envoie du local vers le distant
169
170 Ex : `mirror --reverse ~/repertoire-local/ repertoire-distant/`
171
172 <div style="height:1.5em;"></div>
173
174 * `--continue` : reprend un transfert interrompu, ne retransfère que ce qui manque ou a été modifié
175
176 Ex : `mirror --continue ~/repertoire-source/ /repertoire-local/destination/`
177
178 <div style="height:1.5em;"></div>
179
180 * `--delete` : supprime à la destination les fichiers qui n'existent plus à la source — à utiliser avec précaution
181
182 Ex : `mirror --delete ~/repertoire-source/ /repertoire-local/destination/`
183
184 <div style="height:1.5em;"></div>
185
186 * `--parallel=N` : lance N transferts simultanément — utile pour les répertoires contenant de nombreux petits fichiers
187
188 Ex : mirror --parallel=4 ~/repertoire-source/ /repertoire-local/destination/
189
190 <div style="height:1.5em;"></div>
191
192 * `--verbose` : affiche chaque fichier transféré au fur et à mesure
193
194 Ex : mirror --verbose ~/repertoire-source/ /repertoire-local/destination/
195
196 <div style="height:1.5em;"></div>
197
198 `--log=fichier.log` : enregistre les opérations effectuées dans un fichier : /!\ ne capture pas les erreurs (utiliser la redirection 2>&1 pour cela) /!\
199
200 Ex : mirror --log=transfert.log ~/repertoire-source/ /repertoire-local/destination/
201
202 <div style="height:1.5em;"></div>
203
204 ## Mirroring entre deux serveurs distants
205
206 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** :
207
208 lftp -e "mirror --continue --verbose <sftp://login:mdp@serveur1/repertoire-source/> <ftp://login:mdp@serveur2/repertoire-destination/> ; quit"
209
210 Les protocoles source et destination peuvent être différents (sftp, ftp, ftps), lftp gère la conversion de façon transparente.
211
212 /!\ À noter : Les mots de passe apparaissent en clair dans la ligne de commande /!\
213
214 De là, si besoin, 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` :
215
216 `lftp -e "mirror --continue --verbose <sftp://login:mdp@serveur1/repertoire-source/> <ftp://login:mdp@serveur2/repertoire-destination/> ; quit"`
217
218 => 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.
219
220 => Différence entre `; quit` et `&& quit` :
221
222 * `; quit` : quitte dans tous les cas en fin de transfert
223 * `&& quit` : ne quitte que si le mirror s'est terminé sans erreur
224
225 => Sans `--delete`, le mirror est additif : il n'efface rien à la destination.
226
227 => Pour capturer les erreurs dans un fichier log, rediriger stdout et stderr :
228
229 lftp -e "mirror --continue --verbose <sftp://login:mdp@serveur1/repertoire-source/> <ftp://login:mdp@serveur2/repertoire-destination/> && quit" > transfert.log 2>&1
230
231 ## Quitter la connexion
232
233 lftp login@serveur:/repertoire> bye
234
235 ou `quit` ou `exit`
236
237 ---
238
239 /!\ **Détail** : Le man ne mentionne pas _bye_, il ne documente que _exit_ et _quit_ implicitement via « ftp:use-quit ».
240
241 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.
242
243 Par ailleurs _exit kill_ force l'arrêt de tous les jobs avant de quitter.
244
245 **À 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 mentionne pas.

Langues / Languages

🇫🇷 Français | 🇬🇧 English