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.
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
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
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/
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 ‹ wget ›, ‹ awk ›, voire même ‹ tr ›. Mais j’en ai découvert un lors de ma recherche , ‹ w3m › c’est un web browser pour le terminal (w3m packaging badges - Repology). Et donc je me sers de ‹ w3m › exactement comme on se sert de ‹ cat › pour un fichier.
Solution :
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 :
#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.
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 !
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.
Je n’ai pas encore appris à me servir de variable « tableau », 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.) 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 !