Aller au contenu
Administration Linux medium

Maitriser la commande wget

15 min de lecture

La commande wget est un outil incontournable pour tous ceux qui travaillent en ligne de commande sous Linux. Elle permet de télécharger facilement des fichiers depuis Internet, que ce soit via HTTP, HTTPS ou FTP. Grâce à sa simplicité d’utilisation et à sa robustesse, wget s’impose comme la solution idéale pour récupérer des fichiers, des pages web, ou même des sites entiers, sans interface graphique.

Contrairement à curl, qui excelle dans l’interaction avec des APIs et la manipulation fine des requêtes HTTP, wget se distingue par sa capacité à gérer des téléchargements complexes : reprise automatique en cas d’interruption, téléchargement récursif de sites web, gestion des authentifications, limitation de la bande passante, et bien plus encore.

La commande wget se distingue par sa polyvalence et sa robustesse pour le téléchargement de fichiers en ligne de commande. Voici les principales fonctionnalités qui en font un outil incontournable :

  • Support de plusieurs protocoles : HTTP, HTTPS et FTP.
  • Téléchargement de fichiers simples ou multiples.
  • Reprise automatique des téléchargements interrompus.
  • Téléchargement récursif de sites web.
  • Gestion de l’authentification et des cookies.
  • Limitation de la bande passante.
  • Téléchargement en arrière-plan.
  • Support des proxies.
  • Personnalisation des requêtes HTTP.

Grâce à ces fonctionnalités, wget s’adapte à tous les besoins, du téléchargement ponctuel à l’automatisation avancée dans des scripts.

La commande wget s’utilise principalement selon la structure suivante :

Fenêtre de terminal
wget [options] URL
  • options : Ce sont les différentes options que vous pouvez utiliser pour modifier le comportement de wget (voir section suivante pour les options essentielles).

  • URL : C’est l’adresse du fichier ou du site web que vous souhaitez télécharger.

Pour récupérer un fichier unique et l’enregistrer dans le répertoire courant, il suffit de taper :

Fenêtre de terminal
wget https://exemple.com/fichier.zip

Chaque fichier est nommé d’après la dernière partie de l’URL (ici fichier.zip).

Si vous préférez spécifier un nom local différent, utilisez l’option -O :

Fenêtre de terminal
wget -O mon_téléchargement.zip https://exemple.com/fichier.zip

Cette syntaxe enregistre la ressource sous le nom mon_téléchargement.zip.

En contexte automatisé, il est souvent préférable de supprimer la sortie verbeuse ou de limiter les messages d’erreur :

  • -q ou --quiet : mode totalement silencieux.
  • -nv ou --no-verbose : désactive la barre de progression et les détails, mais affiche tout de même les erreurs c

Exemple :

Fenêtre de terminal
wget -q -O fichier.txt https://exemple.com/data.txt

En cas d’échec HTTP (code ≥ 400), utilisez --server-response ou combinez avec --show-progress pour obtenir juste le strict nécessaire.

Pour exécuter le téléchargement en tâche de fond tout en continuant à recevoir un log, on peut combiner :

Fenêtre de terminal
wget -b -o log_wget.txt https://exemple.com/grand_fichier.iso

Le téléchargement se poursuit en arrière-plan et le détail est écrit dans log_wget.txt.

Pour éviter de bloquer indéfiniment un script si le serveur ne répond pas, wget propose plusieurs temps d’attente.

L’option --timeout=SEC fixe un délai global d’attente du serveur (en secondes) avant d’abandonner la connexion :

Fenêtre de terminal
wget --timeout=30 https://exemple.com/ressource

Si aucune donnée n’a été reçue en 30 s, wget interrompt la connexion.

  • --dns-timeout=SEC : délai maximal pour la résolution DNS.
  • --connect-timeout=SEC : délai maximal pour établir la connexion TCP.

Exemple :

Fenêtre de terminal
wget --dns-timeout=10 --connect-timeout=15 https://exemple.com/fichier.tar.gz

Par défaut, wget réessaie 20 fois en cas de coupure ; pour modifier ce comportement, ajustez --tries :

Fenêtre de terminal
wget --tries=5 https://exemple.com/data.csv

Ici, wget tentera au maximum 5 connexions avant d’abandonner.

Enfin, pour reprendre un téléchargement interrompu, utilisez -c :

Fenêtre de terminal
wget -c https://exemple.com/film.mkv

L’option -c détecte la taille déjà reçue et continue la récupération à partir de cet octet.

Lorsque vous devez récupérer en une seule commande un ensemble de ressources, wget propose plusieurs méthodes pour automatiser ces téléchargements, que ce soit via un fichier de liste, des motifs sur les URLs ou simplement une boucle shell.

L’option -i permet de traiter un fichier texte contenant une URL par ligne :

Fenêtre de terminal
wget -i urls.txt
  • Format de urls.txt Chaque ligne du fichier doit contenir une URL complète, sans espace ni commentaire ; par exemple :

    https://exemple.com/photo1.jpg
    https://exemple.com/doc.pdf
    https://exemple.com/archive.tar.gz
  • Logs et renommage Pour garder une trace des téléchargements et renommer certains fichiers, on peut combiner :

    Fenêtre de terminal
    wget -i urls.txt -O nom_personnalisé # renomme tout en même nom, à éviter
    wget -i urls.txt -o urls.log # journalise l’activité dans urls.log
  • Reprise en cas d’interruption Ajoutez -c pour reprendre les fichiers interrompus :

    Fenêtre de terminal
    wget -c -i urls.txt

wget dispose d’un globbing simple qui permet de générer plusieurs URLs à partir d’un motif :

Fenêtre de terminal
wget https://serveur/exemples/file[1-5].txt
  • Séquences Le motif [1-5] génère file1.txt, file2.txt, …, file5.txt.

  • Zéros en tête Pour produire file01.txt à file10.txt :

    Fenêtre de terminal
    wget https://serveur/data/img[01-10].png
  • Listes personnalisées On peut combiner plusieurs blocs :

    Fenêtre de terminal
    wget https://site/chapitre[1-3]-section[a-c].html

    produit chapitre1-sectiona.html, chapitre1-sectionb.html, etc.

Attention : le globbing se limite aux crochets [] et ne supporte pas les jokers * comme dans le shell.

Pour plus de flexibilité, les boucles Bash permettent d’itérer sur une collection d’URLs ou de suffixes :

Fenêtre de terminal
for n in {1..20}; do
wget "https://exemple.com/vidéo_part${n}.mp4"
done
  • Lecture depuis un fichier :

    Fenêtre de terminal
    for url in $(<urls.txt); do
    wget "$url"
    done
  • Renommage automatique :

    Fenêtre de terminal
    count=1
    for url in $(<urls.txt); do
    wget -O "fichier_${count}.dat" "$url"
    ((count++))
    done
  • Exécution parallèle Attention, wget n’est pas nativement parallèle ; vous pouvez lancer plusieurs instances en arrière-plan :

    Fenêtre de terminal
    for url in $(<urls.txt); do
    wget "$url" &
    done
    wait

Pour cloner ou sauvegarder l’intégralité d’un site web, wget propose un mode récursif puissant et très configurable. Ce chapitre détaille les options clés pour contrôler la profondeur, les domaines autorisés, les types de fichiers à inclure ou exclure, et le mirroring “prêt-à-l’emploi”.

  • Option -r Active le téléchargement récursif : wget -r https://exemple.com

  • Option -m (mirror) Combine plusieurs paramètres pour un mirroring “tout-en-un” :

    Fenêtre de terminal
    wget -m https://exemple.com

    Équivaut à -r -N -l inf --no-remove-listing — suit indéfiniment la profondeur (l inf), conserve les fichiers à jour (-N) et ne supprime pas les fichiers .listing.

  • Option -l N Définit le niveau de profondeur maximal (par défaut 5) :

    Fenêtre de terminal
    wget -r -l 2 https://exemple.com

    Ici, wget suit les liens vers deux niveaux au maximum.

  • Profondeur infinie Avec -l inf (ou dans le mode mirror), tous les niveaux sont explorés jusqu’à épuisement des pages accessibles.

Pour éviter d’aller chercher des ressources hors du site principal :

  • Option -D domaine1,domaine2 Limite le téléchargement aux domaines listés :

    Fenêtre de terminal
    wget -r -D exemple.com,cdn.exemple.com https://exemple.com
  • Option --span-hosts Autorise la traversée vers d’autres hôtes si nécessaire, en combinaison avec -D.

  • Option --exclude-domains Exclut certains domaines explicitement :

    Fenêtre de terminal
    wget -r --exclude-domains pub.tracking.com https://exemple.com

Pour affiner ce qui est téléchargé :

  • Option --accept / --reject Spécifie des motifs de noms de fichiers :

    Fenêtre de terminal
    wget -r --accept jpg,png,html https://exemple.com

    Ne récupère que les images et pages HTML.

  • Option --accept-regex / --reject-regex Permet des filtres basés sur des expressions régulières :

    Fenêtre de terminal
    wget -r --reject-regex ".*\?sessionid=.*" https://exemple.com
  • Conserver la structure des répertoires Par défaut, wget -r recrée l’arborescence du site dans votre dossier local.

  • Mettre à jour les fichiers existants Avec -N, n’écrase que si la copie distante est plus récente.

  • Générer un index HTML local Option --convert-links convertit tous les liens pour qu’ils pointent vers les fichiers locaux :

    Fenêtre de terminal
    wget -m --convert-links https://exemple.com
  • Limiter la vitesse Utilisez --limit-rate pour ne pas saturer votre connexion, même en mode mirror.

Pour accéder à des ressources protégées ou dont l’URL finale diffère de l’URL initiale, wget fournit plusieurs options pour suivre les redirections HTTP et pour gérer divers mécanismes d’authentification.

Lorsqu’une URL renvoie un code 3xx, wget peut automatiquement suivre vers l’emplacement final :

Fenêtre de terminal
wget --max-redirect=20 https://exemple.com/ancien-lien
  • --max-redirect=N : nombre maximal de redirections autorisées (par défaut 20).
  • --trust-server-names : renomme automatiquement le fichier de sortie selon le nom fourni par le serveur à la dernière redirection.

Ces options permettent d’éviter les erreurs “404” ou “301 Moved Permanently” non suivies et garantissent que vous récupérez le contenu réel.

Pour accéder à des pages protégées par authentification basique ou digest, deux paires d’options sont disponibles :

Fenêtre de terminal
wget --http-user=utilisateur --http-password=motdepasse https://exemple.com/zone-securisee
  • --http-user=USER et --http-password=PASS : authentification HTTP Basic.
  • --auth-no-challenge : envoie les identifiants sans attendre une invitation du serveur (utile pour certains serveurs mal configurés).
  • --http-auth-method=[basic|digest] : force l’usage de Basic ou Digest selon le besoin.

Pour simuler une session de navigateur, conserver ou réutiliser des cookies :

Fenêtre de terminal
wget --save-cookies cookies.txt --keep-session-cookies --post-data="user=Alice&pass=1234" https://exemple.com/login
wget --load-cookies cookies.txt https://exemple.com/ma-page
  • --save-cookies FICHIER : enregistre les cookies reçus dans un fichier.
  • --keep-session-cookies : inclut aussi les cookies de session dans le fichier (par défaut, seuls les cookies persistants sont sauvés).
  • --load-cookies FICHIER : recharge les cookies préalablement sauvegardés pour les envoyer avec la requête.

Cette méthode est très utile pour automatiser l’accès à des zones nécessitant une connexion préalable.

Authentification par en-tête personnalisé (tokens)

Section intitulée « Authentification par en-tête personnalisé (tokens) »

Certaines API ou applications web utilisent des tokens Bearer ou d’autres mécanismes d’en-tête :

Fenêtre de terminal
wget --header="Authorization: Bearer MON_JETON" https://api.exemple.com/ressources
  • --header="Clé: Valeur" : ajoute un en-tête HTTP personnalisé.
  • Vous pouvez spécifier plusieurs fois --header pour inclure aussi Content-Type, Accept, etc.

Pour les transferts de fichiers via FTP ou FTPS, wget gère aussi l’authentification :

Fenêtre de terminal
wget --ftp-user=ftpuser --ftp-password=ftppass ftp://ftp.exemple.com/dossier/fichier.txt
  • --ftp-user=USER et --ftp-password=PASS : identifiants pour FTP ou FTPS.
  • Pour un serveur FTPS explicite (FTP sur SSL/TLS), utilisez l’URL commençant par ftps://.

Cette flexibilité fait de wget un outil universel pour accéder à quasiment tous les services web ou FTP protégés.

Lorsqu’un accès direct à Internet n’est pas possible ou que vous souhaitez acheminer vos téléchargements via un serveur intermédiaire, wget met à disposition plusieurs options pour configurer et utiliser des proxies, ainsi que pour ajuster les résolutions DNS et le comportement IPv4/IPv6.

  • Définir le proxy via variables d’environnement

    Fenêtre de terminal
    export http_proxy="http://user:pass@proxy.exemple.com:3128/"
    export https_proxy="http://user:pass@proxy.exemple.com:3128/"
    wget https://exemple.com/fichier.txt

    Les variables http_proxy et https_proxy sont automatiquement prises en compte par wget.

  • Options en ligne de commande

    Fenêtre de terminal
    wget --proxy-user=utilisateur --proxy-password=motdepasse \
    --execute="http_proxy = http://proxy.exemple.com:3128" \
    https://exemple.com/data.csv

    Permet de spécifier les identifiants et l’hôte du proxy sans toucher aux variables d’environnement.

Pour une requête particulière, si vous souhaitez ignorer le proxy configuré :

Fenêtre de terminal
wget --no-proxy https://exemple.com/ressource

Cette option force wget à établir une connexion directe.

Sur des réseaux mixtes, il peut être nécessaire de contraindre la famille d’adresses IP utilisée :

  • Forcer IPv4

    Fenêtre de terminal
    wget -4 https://exemple.com/fichier.img
  • Forcer IPv6

    Fenêtre de terminal
    wget -6 https://exemple.com/fichier.img

Ces options peuvent résoudre des problèmes de connectivité liés à certaines configurations DNS.

Pour conserver vos réglages de proxy et de timeouts sans répéter les options, vous pouvez créer un fichier de configuration personnel nommé .wgetrc dans votre répertoire personnel. Ce fichier permet de définir des valeurs par défaut pour toutes vos commandes wget, ce qui est particulièrement utile pour les environnements automatisés ou les scripts.

Exemple de fichier .wgetrc :

http_proxy = http://proxy.exemple.com:3128/
https_proxy = http://proxy.exemple.com:3128/
no_proxy = localhost,127.0.0.1
dns_timeout = 5
connect_timeout = 10
read_timeout = 20

Ainsi, chaque appel à wget appliquera ces valeurs par défaut, simplifiant vos scripts et commandes ad hoc.

Au-delà des téléchargements basiques et des modes miroir, wget propose des fonctionnalités avancées qui facilitent l’intégration dans des scripts complexes, l’automatisation conditionnelle, et le contrôle fin du comportement réseau.

Certains serveurs adaptent leur réponse en fonction du client identifié. Pour forcer un User-Agent précis :

Fenêtre de terminal
wget --user-agent="Mozilla/5.0 (compatible; MonScraper/1.0)" \
https://exemple.com/page

Cela peut être utile pour contourner des filtrages basés sur le User-Agent ou tester la réactivité du serveur à différents navigateurs.

Grâce à l’option --execute ou à la combinaison avec un script shell, vous pouvez enchaîner automatiquement des actions post-téléchargement :

Fenêtre de terminal
wget https://exemple.com/data.csv && \
csvtool readable data.csv > data_pretty.txt

Ou dans .wgetrc :

execute = chmod 644 # applique le chmod sur les fichiers récupérés

Pour protéger votre réseau ou respecter des plafonds, --limit-rate restreint le débit :

Fenêtre de terminal
wget --limit-rate=200k https://exemple.com/video.mp4

Vous pouvez également définir un nombre maximal de téléchargements simultanés dans un script via un contrôle de boucle.

Utilisation conditionnelle et scripts d’automatisation

Section intitulée « Utilisation conditionnelle et scripts d’automatisation »

En combinant wget avec des tests shell, vous pouvez réaliser des boucles de vérification et de téléchargement :

Fenêtre de terminal
while true; do
wget -N https://exemple.com/rapport_quotidien.pdf
sleep 86400 # attend 24 h
done

Ou surveiller un fichier Last-Modified :

Fenêtre de terminal
if wget --spider --server-response https://exemple.com/page 2>&1 \
| grep -q "Last-Modified: .*2025"; then
wget https://exemple.com/page -O nouvelle.html
fi

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
5 min.
80%

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

En résumé, wget offre une solution fiable et non interactive pour télécharger des fichiers via HTTP, HTTPS et FTP, en supportant la reprise automatique et l’exécution en arrière-plan. Sa capacité de téléchargement récursif et de mirroring de sites entiers en fait un outil incontournable pour copier et synchroniser des contenus web. Léger, portable et facilement scriptable, wget s’intègre naturellement dans les chaînes d’automatisation et les environnements serveur pour simplifier les tâches de récupération et de sauvegarde de données.