Si je lance wget deux fois, il ne reconnaît pas qu'il a déjà téléchargé ce fichier et en crée un nouveau. Existe-t-il un moyen de l'empêcher de télécharger à nouveau le fichier?
$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...
$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png.1’
...
(Heureux d'utiliser curl ou une alternative scriptable similaire si wget ne peut pas le faire.)
Réponses:
Je vous suggère d'utiliser l'
-N
option.Il active l'horodatage, qui ne re-télécharge le fichier que s'il est plus récent sur le serveur que la version téléchargée.
Caveat (du commentaire de Kasiya)
Si le serveur n'est pas configuré correctement, il peut toujours signaler que le fichier est nouveau et
-N
téléchargera toujours le fichier. Dans ce cas,-nc
c'est probablement une meilleure option.la source
-N
peut échouer et wget sera toujours retéléchargé. Donc, parfois,-nc
c'est mieux que-N
Oui, c'est une
-c
option.Si le fichier est le même, la deuxième tentative de téléchargement s'arrêtera.
Mises en garde (d'après les commentaires de jofel)
Si le fichier a changé sur le serveur, l'
-c
option peut donner des résultats incorrects.Avec
-c
, wget demande simplement au serveur toutes les données au-delà de la partie du fichier déjà téléchargé, rien d'autre. Il ne vérifie pas s'il y a eu un changement dans la partie du fichier qui est déjà téléchargée. Ainsi, vous pourriez avoir un fichier corrompu qui est un mélange de l'ancien et du nouveau fichier.Test local
Vous pouvez le tester en cours d' exécution simple serveur web local comme suit (Merci à @roadmr « s réponse ):
Ouvrez une fenêtre de terminal et saisissez:
Ouvrez maintenant un autre terminal et faites:
Notez que
filename-to-download
c'est le fichier qui se trouve dans/path/to/parent-download-dir/
lequel nous voulons le télécharger.Maintenant, si vous exécutez la commande wget plusieurs fois, vous verrez:
Ok, allez maintenant dans le
/path/to/parent-download-dir/
répertoire et ajoutez quelque chose au fichier source, par exemple s'il s'agit d'un fichier texte, ajoutez-y une simple ligne supplémentaire et enregistrez le fichier. Essayez maintenant avecwget -c ...
. Très bien, vous verrez à nouveau le fichier à nouveau télécharger, mais vous l'avez déjà téléchargé auparavant.Raison: pourquoi re-télécharger?
car sa taille est passée à une taille plus grande que l'ancien fichier téléchargé et rien d'autre.
la source
-nc
ne fonctionne pas comme vous l'avez dit, mais l'-c
option fonctionnera et c'est pourquoi j'ai mentionné l'-c
option en premier.-c
,wget
demande au serveur toutes les données au-delà de la partie du fichier déjà téléchargé, rien d'autre. Il ne vérifie pas s'il y a entre-temps une modification de la partie déjà téléchargée du fichier sur le serveur. Au pire, vous obtenez un fichier corrompu qui est un mélange entre l'ancien et le nouveau fichier.Il existe également une autre option appelée
-nc
pour le wgetting:Lorsque l'
-nc
option est spécifiée, Wget refusera de télécharger des copies du même fichier. Si vous aviez le même fichier quiwget
tente de télécharger, il refusera de le télécharger à moins que vous ne renommiez ou supprimiez le fichier local.Parfois, cette option est très bonne et j'ai recommandé d'utiliser l'
-nc
option au lieu des deux-c
ou l'-N
option car ces options remplaceront le fichier de téléchargement par votre fichier local si elles avaient le même nom.Caveat (du commentaire de Jofel)
L'
-nc
option ne met pas à jour le fichier s'il a changé sur le serveur. Si vous savez que le fichier va changer, l'-N
option est préférable. Si vous savez que le fichier ne changera pas (ou que vous ne vous en souciez pas), alors ça-nc
va.la source
Je sais que c'était une question spécifique concernant wget mais l'OP a mentionné "Heureux d'utiliser curl ou une alternative scriptable similaire si wget ne peut pas faire cela." Je ne sais pas quelle est l'exigence ici (plusieurs fichiers, conserver l'ancienne version si différente de l'original, remplacer par la nouvelle version téléchargée). Selon ce que vous voulez et la façon dont vous voulez gérer les doublons, vous aurez peut-être besoin de plus que cela. Une façon très simple de faire ce que vous semblez vouloir faire est simplement d'utiliser curl à la place.
Cette commande remplacera à chaque fois l'ancien fichier par le nouveau téléchargé.
N'envoyez pas cela au terminal (sans le "> [nom de fichier]") si vous téléchargez un fichier binaire par opposition au texte. Cela pourrait potentiellement gâcher votre session de terminal. Dans le cas où vous le faites par accident, vous devrez peut-être ouvrir une autre session shell / terminal.
la source