J'ai besoin de télécharger un fichier depuis un serveur HTTP, mais seulement s'il a changé depuis la dernière fois que je l'ai téléchargé (par exemple via l'en- If-Modified-Since
tête). J'ai également besoin d'utiliser un nom personnalisé pour le fichier sur mon disque.
Quel outil puis-je utiliser pour cette tâche sous Linux?
wget -N
ne peut pas être utilisé car -N
ne peut pas être utilisé avec -O
.
Réponses:
Pensez à utiliser à la
curl
place dewget
:man curl
dit:Si
$file
cela ne préexiste pas nécessairement, vous devrez rendre l'utilisation de l'-z
indicateur conditionnelle, en utilisanttest -e "$file"
:(Notez que nous ne citons pas l'expansion de
$zflag
ici, car nous voulons qu'elle soit divisée en 0 ou 2 jetons).Si votre shell prend en charge les tableaux (par exemple Bash), nous avons une version plus sûre et plus propre:
la source
Le commutateur wget
-N
n'obtient le fichier que s'il a changé, donc une approche possible serait d'utiliser le-N
commutateur simple qui obtiendra le fichier s'il en a besoin mais le laisse avec le mauvais nom. Créez ensuite un lien dur à l'aide de laln -P
commande pour le lier à un "fichier" avec le nom correct. Le fichier lié a les mêmes métadonnées que l'original.La seule limitation étant que vous ne pouvez pas avoir de liens physiques au-delà des limites du système de fichiers.
la source
Script Python 3.5+ pour la commande wrapping curl:
la source
chain
:)Une approche similaire à la « vérification de la date » (avec «curl - time-cond»), serait de télécharger en fonction de la comparaison de taille de fichier, c'est-à-dire de télécharger uniquement si le fichier local a une taille différente de celle du fichier distant .
Il est utile, par exemple, lorsque le processus de téléchargement a échoué au milieu et que le fichier téléchargé local obtient donc une date plus récente que le fichier distant, mais qu'il est en réalité corrompu et qu'un nouveau téléchargement est nécessaire:
L'option "curl -z / --time-cond" (qui a été suggérée dans une autre réponse) ne téléchargera pas le fichier distant dans ce cas (car le fichier local a une date plus récente), mais ce script de " contrôle de taille " le fera!
la source