Télécharger récursivement un dossier FTP sous Linux : le guide pratique

Quand on gère des sites web sur des hébergements mutualisés d’ancienne génération, on se retrouve souvent face à une contrainte bien connue : l’accès FTP est le seul moyen disponible pour interagir avec les fichiers du serveur. Pas de SSH, pas de SFTP, juste du bon vieux FTP. Et quand il s’agit de récupérer en local l’intégralité d’un site — pour une sauvegarde, une migration, ou simplement pour travailler offline — la question se pose rapidement : comment télécharger récursivement un répertoire entier via FTP depuis un terminal Linux ?

Le protocole FTP, dans sa version basique, ne supporte pas le téléchargement récursif nativement. Il faut donc passer par des outils tiers qui implémentent cette logique côté client. Voici les trois solutions les plus fiables, avec leurs avantages et leurs cas d’usage respectifs.


1. wget — la solution universelle

wget est probablement l’outil le plus répandu sur les systèmes Linux. Initialement conçu pour le téléchargement HTTP/HTTPS, il supporte également le protocole FTP avec une option de récursivité.

La commande de base pour télécharger un répertoire FTP de manière récursive :

wget -r ftp://utilisateur:motdepasse@exemple.com/repertoire-distant/

Pour séparer les identifiants de l’URL (utile en script pour ne pas exposer le mot de passe dans l’historique) :

wget -r --user="utilisateur" --password="motdepasse" ftp://exemple.com/repertoire-distant/

L’option -r active la récursivité, mais elle est limitée à 5 niveaux de profondeur par défaut. Pour des arborescences plus profondes, on utilise -l suivi du nombre de niveaux souhaités, ou inf pour une profondeur illimitée :

wget -r -l inf --user="utilisateur" --password="motdepasse" ftp://exemple.com/repertoire-distant/
wget -r -nH --cut-dirs=5 -nc ftp://utilisateur:motdepasse@exemple.com/repertoire-distant/

-nH (no host directories) — par défaut, wget crée un dossier local portant le nom du serveur (server/). Cette option l’en empêche. Généralement indispensable quand on combine avec --cut-dirs.

--cut-dirs=5 — même avec -nH, wget reproduit le chemin distant en local. Cette option demande d’ignorer les 5 premiers segments du chemin. Ici, //absolute/path/to/directory contient 5 composants (absolute, path, to, directory, et le segment vide du double slash), donc les fichiers atterrissent directement à la racine du dossier courant plutôt que dans ./absolute/path/to/directory/. Le bon nombre à passer dépend de la profondeur de votre chemin distant.

-nc (no-clobber) — si un fichier existe déjà en local, il n’est pas re-téléchargé. Pratique pour reprendre un téléchargement interrompu ou pour ne synchroniser que les nouveautés.

L’option -m : le mode miroir

L’option la plus pratique reste -m (miroir). Elle active simultanément la récursivité, l’horodatage (pour ne pas re-télécharger ce qui n’a pas changé), une profondeur infinie, et conserve les listings de répertoires FTP :

wget -m ftp://utilisateur:motdepasse@exemple.com/

Pour éviter de re-télécharger des fichiers déjà présents en local, on ajoute -nc (no-clobber) :

wget -m -nc ftp://utilisateur:motdepasse@exemple.com/

Et pour les téléchargements longs, on recommande de lancer la commande avec nohup et en arrière-plan :

nohup wget -m ftp://utilisateur:motdepasse@exemple.com/ &

Avantages de wget : disponible par défaut sur pratiquement toutes les distributions Linux, pas d’installation supplémentaire nécessaire.

Limite : moins performant que les alternatives sur des arborescences très volumineuses avec de nombreux sous-dossiers.


2. ncftpget — rapide et efficace

ncftp est un client FTP en ligne de commande conçu spécifiquement pour les scripts et les usages avancés. Son utilitaire ncftpget est particulièrement adapté au téléchargement récursif.

Installation sur une distribution basée sur APT (Debian, Ubuntu) :

sudo apt-get install ncftp

La commande pour télécharger un répertoire complet avec tous ses sous-dossiers :

ncftpget -R -v -u "utilisateur" ftp.exemple.com /repertoire-local /repertoire-distant

Détail des options :

  • -R : active le téléchargement récursif
  • -v : mode verbeux, affiche la progression du téléchargement
  • -u "utilisateur" : spécifie le nom d’utilisateur (le mot de passe sera demandé interactivement)
  • -T : désactive la tentative de téléchargement via tar (recommandé, car cette fonctionnalité échoue souvent avec une erreur « not a tar archive »)

Exemple complet avec l’option -T recommandée :

ncftpget -R -T -v -u utilisateur ftp.exemple.com /tmp /httpdocs

Avantages de ncftpget : plus rapide et plus fiable que wget sur de grandes arborescences, gestion propre des erreurs de connexion.

Limite : nécessite une installation supplémentaire, et peut échouer si un nom de répertoire distant contient des caractères spéciaux comme [ ou ].


3. lftp — la solution puissante pour les cas complexes

lftp est le client FTP le plus complet disponible en ligne de commande. Il supporte FTP, FTPS (FTP over TLS), SFTP, HTTP, et bien d’autres protocoles. Sa commande mirror est particulièrement efficace pour les téléchargements récursifs.

lftp -u utilisateur,motdepasse ftp.exemple.com <<EOF
mirror --continue --verbose /repertoire-distant /repertoire-local
quit
EOF

Pour les hébergeurs qui supportent FTPS (FTP sécurisé via TLS), lftp s’impose comme la meilleure option :

lftp -u utilisateur,motdepasse -e "\
  set ftp:ssl-force true \
  set ftp:ssl-protect-data true \
" ftp.exemple.com <<EOF
mirror --continue --parallel=10 --verbose /repertoire-distant /repertoire-local
quit
EOF

L’option --parallel=10 permet de lancer plusieurs téléchargements simultanément, ce qui réduit considérablement le temps total sur des dossiers contenant de nombreux petits fichiers. L’option --continue reprend le transfert là où il s’était arrêté en cas d’interruption réseau.

Avantages de lftp : téléchargement parallèle, reprise sur interruption, support de FTPS, très configurable.

Limite : syntaxe légèrement plus complexe que les deux autres outils.


Récapitulatif : quelle commande choisir ?

SituationOutil recommandé
Téléchargement rapide, pas d’installationwget -m
Grande arborescence, FTP simplencftpget -R -T
FTPS ou téléchargement parallèlelftp mirror --parallel
Reprise sur coupure réseaulftp mirror --continue

Note sur la sécurité

Le protocole FTP transmet les identifiants et les données en clair sur le réseau. Si votre hébergeur propose du FTPS ou du SFTP, préférez ces alternatives. Pour les hébergements contraints au FTP nu, évitez de passer le mot de passe directement dans la ligne de commande (visible dans l’historique bash) ; utilisez plutôt l’invite interactive ou un fichier de configuration sécurisé.


Que ce soit pour une sauvegarde d’urgence, une migration de site ou simplement pour travailler sur une copie locale, ces trois outils couvrent l’essentiel des besoins. wget pour la simplicité, ncftpget pour la robustesse, lftp pour la puissance — à vous de choisir selon le contexte.