29 votes

Y a-t-il une option curl/wget qui empêche de sauvegarder les fichiers en cas d'erreurs http?

Je veux télécharger beaucoup d'URL dans un script mais je ne veux pas enregistrer celles qui provoquent des erreurs HTTP.

Autant que je sache d'après les pages de manuel, ni curl ni wget ne fournissent une telle fonctionnalité. Est-ce que quelqu'un sait s'il existe un autre gestionnaire de téléchargement qui le fait?

0voto

vmonteco Points 4213

Je propose une solution de contournement, qui télécharge le fichier mais le supprime également s'il a une taille de 0 (ce qui se produit en cas d'erreur 404).

wget -O  
if [[ (du  | cut -f 1) == 0 ]]; then
    rm ;
fi;

Cela fonctionne pour zsh mais vous pouvez l'adapter pour d'autres shells.

Mais il ne le sauvegarde en premier lieu que si vous fournissez l'option -O

0voto

Juan Lago Points 74

Comme alternative, vous pouvez créer un fichier rotationnel temporaire :

wget http://example.net/myfile.json -O myfile.json.tmp -t 3 -q && mv list.json.tmp list.json

La commande précédente téléchargera toujours le fichier "myfile.json.tmp", cependant seulement lorsque le statut de sortie de wget est égal à 0, le fichier est tourné en "myfile.json".

Cette solution permet d'éviter d'écraser le fichier final lorsqu'une panne réseau se produit.

L'avantage de cette méthode est que en cas de problème, vous pouvez inspecter le fichier temporaire et voir quel message d'erreur est retourné.

Le paramètre "-t" tente de télécharger le fichier plusieurs fois en cas d'erreur.

Le "-q" est le mode silencieux et il est important de l'utiliser avec cron car cron rapportera toute sortie de wget.

Le "-O" est le chemin et le nom du fichier de sortie.

Rappelez-vous que pour les horaires de cron, il est très important de toujours fournir le chemin complet pour tous les fichiers et dans ce cas également pour le programme "wget" lui-même.

-3voto

Marc Queralt Points 19

Vous pouvez télécharger le fichier sans l'enregistrer en utilisant l'option "-O -" comme

wget -O - http://jagor.srce.hr/

Vous pouvez obtenir plus d'informations sur http://www.gnu.org/software/wget/manual/wget.html#Advanced-Usage

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X