Version 2.38 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 * `queue mirror /rep1/ /dest1/`
116 * `queue mirror /rep2/ /dest2/`
117 * `queue mirror /rep3/ /dest3/`
118 * `wait`
119
120 Ci-dessus lftp exécute les trois _mirrors_ séquentiellement sans intervention.
121
122 <div style="height:1.5em;"></div>
123
124 Mettre chaque queue en arrière-plan si on ne veut pas employer "wait" :
125
126 * `queue mirror /rep1/ /dest1/ &`
127 * `queue mirror /rep2/ /dest2/ &`
128 * `queue mirror /rep3/ /dest3/ &`
129
130 /!\  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 /!\
131
132 => wait après les queues est recommandé en cas de transferts vers le même serveur.
133
134 <div style="height:1.5em;"></div>
135
136 ## Transferts de répertoires complets : syntaxe et options
137
138 Depuis le prompt lftp, déjà connecté au serveur source :
139
140 mirror repertoire-source/ /chemin/local/repertoire-destination/
141
142 ou
143
144 mirror repertoire-source /chemin/local/
145
146 => La présence du slash final `/` détermine le résultat
147
148 <div style="height:1.5em;"></div>
149
150 À garder en tête pour la lecture des exemples suivants :
151
152 * Avec `repertoire-source/` le contenu du répertoire est copié dans la destination, mais pas le répertoire lui-même.
153 * Avec `repertoire-source` le répertoire complet est copié dans la destination, contenu inclus.
154 * Le signe `~/` pour "home" sera à adapter en fonction de votre cas
155 * Préférez toujours vous déplacer dans le répertoire de travail, qu'il soit local ou distant
156
157 <div style="height:1.5em;"></div>
158
159 Depuis le terminal bash, non connecté, récupère le contenu complet du répertoire distant:
160
161 lftp -e "mirror <sftp://login:mdp@serveur:/repertoire-source/> /repertoire-local/destination/ ; quit"
162
163 <div style="height:1.5em;"></div>
164
165 ### Options
166
167 * `--reverse` : inverse le sens du transfert : envoie du local vers le distant
168
169 Ex : `mirror --reverse ~/repertoire-local/ repertoire-distant/`
170
171 <div style="height:1.5em;"></div>
172
173 * `--continue` : reprend un transfert interrompu, ne retransfère que ce qui manque ou a été modifié
174
175 Ex : `mirror --continue ~/repertoire-source/ /repertoire-local/destination/`
176
177 <div style="height:1.5em;"></div>
178
179 * `--delete` : supprime à la destination les fichiers qui n'existent plus à la source — à utiliser avec précaution
180
181 Ex : `mirror --delete ~/repertoire-source/ /repertoire-local/destination/`
182
183 <div style="height:1.5em;"></div>
184
185 * `--parallel=N` : lance N transferts simultanément — utile pour les répertoires contenant de nombreux petits fichiers
186
187 Ex : mirror --parallel=4 ~/repertoire-source/ /repertoire-local/destination/
188
189 <div style="height:1.5em;"></div>
190
191 * `--verbose` : affiche chaque fichier transféré au fur et à mesure
192
193 Ex : mirror --verbose ~/repertoire-source/ /repertoire-local/destination/
194
195 <div style="height:1.5em;"></div>
196
197 `--log=fichier.log` : enregistre les opérations effectuées dans un fichier : /!\ ne capture pas les erreurs (utiliser la redirection 2>&1 pour cela) /!\
198
199 Ex : mirror --log=transfert.log ~/repertoire-source/ /repertoire-local/destination/
200
201 <div style="height:1.5em;"></div>
202
203 ## Mirroring entre deux serveurs distants
204
205 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** :
206
207 lftp -e "mirror --continue --verbose <sftp://login:mdp@serveur1/repertoire-source/> <ftp://login:mdp@serveur2/repertoire-destination/> ; quit"
208
209 Les protocoles source et destination peuvent être différents (sftp, ftp, ftps), lftp gère la conversion de façon transparente.
210
211 /!\ À noter : Les mots de passe apparaissent en clair dans la ligne de commande /!\
212
213 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` :
214
215 `lftp -e "mirror --continue --verbose <sftp://login:mdp@serveur1/repertoire-source/> <ftp://login:mdp@serveur2/repertoire-destination/> ; quit"`
216
217 => 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.
218
219 => Différence entre `; quit` et `&& quit` :
220
221 * `; quit` : quitte dans tous les cas en fin de transfert
222 * `&& quit` : ne quitte que si le mirror s'est terminé sans erreur
223
224 => Sans `--delete`, le mirror est additif : il n'efface rien à la destination.
225
226 => Pour capturer les erreurs dans un fichier log, rediriger stdout et stderr :
227
228 lftp -e "mirror --continue --verbose <sftp://login:mdp@serveur1/repertoire-source/> <ftp://login:mdp@serveur2/repertoire-destination/> && quit" > transfert.log 2>&1
229
230 ## Quitter la connexion
231
232 lftp login@serveur:/repertoire> bye
233
234 ou `quit`ou `exit`
235
236 ---
237
238 /!\ **Détail** : Le man ne mentionne pas _bye_, il ne documente que _exit_ et _quit_ implicitement via « ftp:use-quit ».
239
240 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.
241
242 Par ailleurs _exit kill_ force l'arrêt de tous les jobs avant de quitter.
243
244 **À 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