Ignorer le téléchargement si des fichiers existent dans wget?


Réponses:


269

Essayez le paramètre suivant:

-nc, --no-clobber: ignorer les téléchargements qui seraient téléchargés dans des fichiers existants.

Exemple d'utilisation:

wget -nc http://example.com/pic.png

34
-ncn'empêche pas l'envoi de la requête HTTP et le téléchargement ultérieur du fichier. Il ne fait rien après le téléchargement du fichier s'il a déjà été entièrement récupéré. Existe-t-il de toute façon d'empêcher de faire la requête HTTP si le fichier existe déjà? stackoverflow.com/questions/33203898/…
ma11hew28

8
Comme indiqué sur la question liée, je ne suis pas d'accord - Si aucun clobber n'est utilisé et que le nom de fichier existe, il se ferme. Aucune demande HEAD même. Même si ce n'était pas le cas, vérifiez si vous avez un fichier pour commencer :-)[ ! -e "$(basename $URL)" ] && wget $URL
plundra

3
Je pense que je peux obtenir des résultats différents parce que j'utilise l' --recursiveoption.
ma11hew28

197

La -nc, --no-clobberoption n'est pas la meilleure solution sous forme de fichiers les plus récents ne seront pas téléchargés. On devrait utiliser à la -Nplace qui téléchargera et écrasera le fichier uniquement si le serveur a une version plus récente, donc la bonne réponse est:

wget -N http://www.example.com/images/misc/pic.png

Ensuite, exécuter Wget avec -N, avec ou sans -rou -p, la décision de télécharger ou non une copie plus récente d'un fichier dépend de l'horodatage local et distant et de la taille du fichier. -ncpeut ne pas être spécifié en même temps que -N.

-N, --timestamping: Activez l'horodatage.


39
Lorsque le serveur n'est pas configuré correctement, il -Npeut échouer et wget sera toujours retéléchargé. Parfois, -ncc'est donc une meilleure solution.
utilisateur

2
quel pourrait être le scénario applicable où «lorsque le serveur n'est pas configuré correctement» se produirait?
AjayKumarBasuthkar

lorsque vous téléchargez à partir d'un emplacement qui a été copié, en modifiant tous les horodatages.
Robert

La meilleure solution dépend du contexte. Par exemple, je télécharge ~ 1600 fichiers à partir d'une liste, puis j'ai mis à jour la liste pour inclure d'autres fichiers. Les fichiers ne changent pas, donc je ne me soucie pas de la dernière version et je ne veux pas qu'elle vérifie le serveur pour les nouvelles versions des 1600 fichiers que j'ai déjà.
JBentley

2
@AjayKumarBasuthkar: Lorsque le serveur ne prend en charge aucun moyen de rechercher un fichier plus récent, wgetse plaindra Last-modified header missing; c'est exactement la situation décrite.
Piskvor a quitté le bâtiment le

23

Lors de l' exécution Wget avec -rou -p, mais sans -N, -ndou-nc , le re-téléchargement d'un fichier entraînera la nouvelle copie en écrasant simplement l'ancienne.

Ainsi, l'ajout -ncempêchera ce comportement, au lieu de cela, la version d'origine sera préservée et toutes les nouvelles copies sur le serveur seront ignorées.

Voir plus d'informations sur GNU.


18

La réponse que je cherchais est sur https://unix.stackexchange.com/a/9557/114862 .

L'utilisation de l' -cindicateur lorsque le fichier local est de taille supérieure ou égale à la version du serveur évitera un nouveau téléchargement.


1
C'est particulièrement utile lorsque vous téléchargez un tas de fichiers avec l'indicateur -i. wget -i filelist.txt -cva reprendre l'échec du téléchargement d'une liste de fichiers.
Trevor
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.