# Télécharger un fichier avec nom qui change de temps en temps avec la commande wget ou curl

**URL:** <https://www.debian-fr.org/t/telecharger-un-fichier-avec-nom-qui-change-de-temps-en-temps-avec-la-commande-wget-ou-curl/70524>\
**Category:** Support Debian\
**Created:** [Août 5, 2016, 11:40 UTC](https://www.debian-fr.org/t/telecharger-un-fichier-avec-nom-qui-change-de-temps-en-temps-avec-la-commande-wget-ou-curl/70524 "2016-08-05T11:40:33Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![jo](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/f0a364/32.png) [@jo](https://www.debian-fr.org/u/jo)\
**Post date:** [Août 5, 2016, 11:40 UTC](https://www.debian-fr.org/t/telecharger-un-fichier-avec-nom-qui-change-de-temps-en-temps-avec-la-commande-wget-ou-curl/70524/1 "2016-08-05T11:40:34Z")

</div>

Bonjour à tous,

Je ne sais pas si ce sujet est dans la bonne section, vous m’excuserez dans le cas contraire. Enfin j’éspère 😋

Je voudrais trouver un moyen pour télécharger un fichier à partir d’un ftp ou http avec la commande wget ou curl peut être. Cette commande serait scriptée afin d’automatiser cette tâche bien entendu.

Jusque là ça ne pose pas vraiment de soucis; seulement ce fichier change de version de temps en temps .  
Il peut donc s’appeler fichier\_v5.0 et puis plus tard fichier\_v5.1… etc…

\*\*Je n’ai bien sûr pas d’accès côté serveur pour changer le nom de ce fichier.

\*\*Je pensais à la commande wget ou curl avec un pipe mais là je n’arrive pas à trouver de solution.

ex:  
`curl ftp://serveur.fr/ | grep fichier`

Je m’en remet donc à vous. Avez une petite idée ?

Jo

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Août 5, 2016, 12:02 UTC](https://www.debian-fr.org/t/telecharger-un-fichier-avec-nom-qui-change-de-temps-en-temps-avec-la-commande-wget-ou-curl/70524/2 "2016-08-05T12:02:34Z")

</div>

Il faut dans ton cas un traitement côté serveur pour trouver le nom du fichier qui peut varier, avec curl ou wget en direct je ne vois pas comment faire.  
Je te propose autre chose, tu montes ta ressource FTP dans un dossier de ton PC et tu recherches ton fichier comme s’il était en local !  
j’utilise beaucoup ce genre de montage avec curlftpfs je te conseille de l’utiliser avec autofs, comme indiqué ici : [https://wiki.archlinux.org/index.php/autofs](https://wiki.archlinux.org/index.php/autofs)

---

<div class="post-metadata">

**Author:** ![papajoker](https://www.debian-fr.org/user_avatar/www.debian-fr.org/papajoker/32/4465_2.png) [@papajoker](https://www.debian-fr.org/u/papajoker)\
**Post date:** [Août 5, 2016, 1:37 UTC](https://www.debian-fr.org/t/telecharger-un-fichier-avec-nom-qui-change-de-temps-en-temps-avec-la-commande-wget-ou-curl/70524/4 "2016-08-05T13:37:17Z")

</div>

voici un petit script **bash**

```auto
(
 echo "
      open ftp.serveur.fr
      user LOGIN $1
      cd "/tondossier/"
      ls -t 
      close
    "
) | ftp -i -n | grep -E ".*toto.*"

```

va récupérer la liste des fichiers «&nbsp;\*toto\*&nbsp;», le plus récent est au début , ajouter un `| head -1` et utiliser `awk` à la place de `grep`

ps: pas sur que le `ls -t` fonctionne bien sur tout serveur ftp (a tester)

EDIT: @seb-ksl ok, changé. mot de passe passé en paramètre du script et si vide alors demandé automatiquement en interactif

---

<div class="post-metadata">

**Author:** ![seb-ksl](https://www.debian-fr.org/user_avatar/www.debian-fr.org/seb-ksl/32/2946_2.png) [@seb-ksl](https://www.debian-fr.org/u/seb-ksl)\
**Post date:** [Août 5, 2016, 4:35 UTC](https://www.debian-fr.org/t/telecharger-un-fichier-avec-nom-qui-change-de-temps-en-temps-avec-la-commande-wget-ou-curl/70524/5 "2016-08-05T16:35:53Z")

</div>

> [@papajoker](#):
>
> user LOGIN PASS

Je sais pas pourquoi, j’ai jamais été grand fan des scripts avec le mot de passe en clair dedans 😕.

Édit : @papajoker Merci 🙂.

---

<div class="post-metadata">

**Author:** ![jo](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/f0a364/32.png) [@jo](https://www.debian-fr.org/u/jo)\
**Post date:** [Août 5, 2016, 6:48 UTC](https://www.debian-fr.org/t/telecharger-un-fichier-avec-nom-qui-change-de-temps-en-temps-avec-la-commande-wget-ou-curl/70524/6 "2016-08-05T18:48:09Z")

</div>

Et bien merci pour toutes vos réponses, c’est vraiment sympa !

Je vais sans doute opter pour le montage local, ce sera sans doute un peu moins compliquer.  
Enfin je l’espère 🙂

J’utilise déjà autofs pour du partage cifs donc avec un peu de travail je devrais y arriver.

Sachant qu’en plus il s’agit d’un ftp public donc pas de soucis avec des credentials particuliers.

C’est ça qui est bien avec les distribs de linux, c’est qu’il y a toujours un moyen de moyenner 😄

Merci encore !

---

<div class="post-metadata">

**Author:** ![jo](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/f0a364/32.png) [@jo](https://www.debian-fr.org/u/jo)\
**Post date:** [Août 6, 2016, 9:43 UTC](https://www.debian-fr.org/t/telecharger-un-fichier-avec-nom-qui-change-de-temps-en-temps-avec-la-commande-wget-ou-curl/70524/8 "2016-08-06T09:43:43Z")

</div>

Salutations,

Je reviens faire un petit retour d’expérience :

Du coup j’ai réussi à créer mon montage ftp avec curlftps et autofs comme conseillé par @debianhadic

ensuite en ce qui concerne la copie du fichier avec un nom qui change je me suis inspiré de ce site :

[stackoverflow.com](http://stackoverflow.com/questions/5241625/find-and-copy-files)

Ce qui donne en ce qui me concerne la commande suivante :

```nohighlight
find -name '*adwcleaner*.exe' | xargs cp -t /media/5eb11d90-c575-475f-9d1b-922637998688/_Logiciels_à_installer/Antispy\ désinfection/ROGUEKILLER-Adwcleaner

```

J’ai aussi rajouté cette petite ligne à mon script qui permet de renommer le fichier adwcleaner\_v…exe en Adwcleaner.exe (tout court) en faisant :

```nohighlight
mv $(find -name "*AAA*") path_B

```

dans mon exemple :

```nohighlight
mv $(find -name "*adwcleaner*.exe") Adwcleaner.exe

```

Il s’agit en fait de télécharger automatiquement sur un serveur la dernière version de quelques logiciels de nettoyage pour Windows, dont adwcleaner. C’est pour le boulot (Je sais c’est triste Windows )😰

ça à l’air de fonctionné, ça reste compréhensible pour moi donc tout va bien 😄

Merci à vous pour le coup de pouce !

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Août 6, 2016, 2:17 UTC](https://www.debian-fr.org/t/telecharger-un-fichier-avec-nom-qui-change-de-temps-en-temps-avec-la-commande-wget-ou-curl/70524/9 "2016-08-06T14:17:39Z")

</div>

Je change de rubrique pour pouvoir indiquer que c’est résolu !  
Merci du retour.

---

<div class="post-metadata">

**Author:** ![goheakan](https://www.debian-fr.org/user_avatar/www.debian-fr.org/goheakan/32/12476_2.png) [@goheakan](https://www.debian-fr.org/u/goheakan)\
**Post date:** [Décembre 2, 2022, 4:00 UTC](https://www.debian-fr.org/t/telecharger-un-fichier-avec-nom-qui-change-de-temps-en-temps-avec-la-commande-wget-ou-curl/70524/10 "2022-12-02T16:00:10Z")

</div>

Bonjour,  
Je me suis inspiré de votre sujet pour trouver une solution à mon problème qui est similaire au votre. Alors au lieu d’ouvrir un nouveau topic je la poste ici puisque ça répond à la question et je la trouve plus simple.

Contexte :  
Je fais des scripts bash pour installer des logiciels/paquets (ça m’amuse 😛 )  
et j’ai fais cette méthode, à chaque fois que j’ai installé un paquet qui n’est pas dans un dépôt, pour trouver la dernière version du paquet. Mon problème était qu’il y a à chaque fois au moins 3 versions sur la page web, par exemple comme ceci :  
[https://download.noalyss.eu/noalyss-package/new/](https://download.noalyss.eu/noalyss-package/new/)

Pour pouvoir faire ça je voulais utiliser que des outils qui se trouve sur la majorité des systèmes Linux pour un portage facile. Certains de ces outils ne sont pas à présenter comme ‹&nbsp;wget&nbsp;›, ‹&nbsp;awk&nbsp;›, voire même ‹&nbsp;tr&nbsp;›. Mais j’en ai découvert un lors de ma recherche , ‹&nbsp;w3m&nbsp;› c’est un web browser pour le terminal ([w3m packaging badges - Repology](https://repology.org/project/w3m/badges)). Et donc je me sers de ‹&nbsp;w3m&nbsp;› exactement comme on se sert de ‹&nbsp;cat&nbsp;› pour un fichier.

Solution :

```bash
for version in $(w3m https://URL/DU/SITE/WEB/ | tr -s ' ' | awk -F " " '$3 ~ /.[EXTENSION_DU_FICHIER]$/ {print $3}'); do
    if [[-z ${last_version}]]; then
        last_version=${version};
    else
        if [[${version} > ${last_version}]]; then last_version=${version}; fi
    fi
done
last_version="${last_version%.[EXTENSION_DU_FICHIER]}" #Supprime l’extension dans le nom du fichier

echo "La dernière version du paquet est : ${last_version}"
wget https://URL/DU/SITE/WEB/"${last_version}".sha256sum
wget https://URL/DU/SITE/WEB/"${last_version}".tar.gz

```

Donc dans mon exemple ça donne :

```bash
#Je mets les informations de la page web qui correspond à tous
#les fichiers dans la variable version_list pour que le code soit plus clair.

version_list=$(w3m https://download.noalyss.eu/noalyss-package/new/ | tr -s ' ' | awk -F " " '$3 ~ /.tar.gz$/ {print $3}') 
for version in ${version_list}; do
    if [[-z ${last_version}]]; then
        last_version=${version};
    else
        if [[${version} > ${last_version}]]; then last_version=${version}; fi
    fi
done
last_version="${last_version%.tar.gz}"

echo "La dernière version de Noalyss est : ${last_version}"
wget https://download.noalyss.eu/noalyss-package/new/"${last_version}".sha256sum
wget https://download.noalyss.eu/noalyss-package/new/"${last_version}".tar.gz

```

Bien entendu certaines choses sont à modifier en fonction de chacun, hormis l’URL, il y aura aussi ce qu’il faut mettre dans le awk, tout dépend comment est fait le nom du paquet et les colonnes de la page web.

---

<div class="post-metadata">

**Author:** ![Sputnik93](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/35a633/32.png) [@Sputnik93](https://www.debian-fr.org/u/Sputnik93)\
**Post date:** [Décembre 2, 2022, 5:05 UTC](https://www.debian-fr.org/t/telecharger-un-fichier-avec-nom-qui-change-de-temps-en-temps-avec-la-commande-wget-ou-curl/70524/11 "2022-12-02T17:05:28Z")

</div>

Salut,

je parse parfois des pages web pour y récupérer également des liens de fichiers à télécharger, j’utilise `wget` pour les récupérer, mais `w3m` permet apparemment de rendre le html en _plain text_, ce qui peut alléger les opérations. Je n’y avais jamais pensé, merci !

> [@goheakan](#):
>
> ```bash
> version_list=$(w3m https://download.noalyss.eu/noalyss-package/new/ | tr -s ' ' | awk -F " " '$3 ~ /.tar.gz$/ {print $3}') 
> for version in ${version_list}; do
> ...
> done
> 
> ```

Pour rendre ton script plus robuste, tu pourrais utiliser une variable `version_list` de type tableau. Là c’est un scalaire (une chaîne de caractères), ça fonctionne tout de même dans ta boucle `for` car la variable contient des caractères qui sont des séparateurs de champs pour bash, mais ça serait plus propre avec une variable tableau `version_list` que tu pourras parcourir avec `${version_list[@]}`.  
Et suite aux recommandations de l’outil `shellcheck`, j’utilise `mapfile` pour générer ce genre de variables.  
Si tu aimes faire des scripts shell, je te conseille vivement shellcheck (tu peux même l’utiliser directement dans vim, avec les plugins nécessaires), en plus d’identifier facilement quelques erreurs syntaxiques, ça permet d’apprendre quelques astuces et bonnes pratiques.

---

<div class="post-metadata">

**Author:** ![goheakan](https://www.debian-fr.org/user_avatar/www.debian-fr.org/goheakan/32/12476_2.png) [@goheakan](https://www.debian-fr.org/u/goheakan)\
**Post date:** [Décembre 6, 2022, 8:47 UTC](https://www.debian-fr.org/t/telecharger-un-fichier-avec-nom-qui-change-de-temps-en-temps-avec-la-commande-wget-ou-curl/70524/12 "2022-12-06T08:47:37Z")

</div>

Bonjour Sputnik93 !

Content que cela te soit utile 🙂

Je n’ai pas encore appris à me servir de variable «&nbsp;tableau&nbsp;», mais ça ne serait tardé parce que j’imagine que de les traiter ligne par ligne peut peut-être permettre d’éviter les problèmes avec un élément de la liste qui contient des espaces par exemple, si je comprends bien l’idée, et certainement entre d’autres choses… En parlant de shellcheck j’ai eu justement cette erreur ([ShellCheck: SC2013 – To read lines rather than words, pipe/redirect to a `while read` loop.](https://www.shellcheck.net/wiki/SC2013)) mais étant donné qu’il ne met pas en avant le problème que tu décris je ne l’avais pas vu sous cet angle. alors merci beaucoup, je vais me pencher et tester les variables tableau pour essayer d’améliorer mes scripts ! 🤩
