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

198

C'est l'exemple le plus simple de l'exécution de wget:

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

mais comment faire wget sauter le téléchargement si pic.png est déjà disponible?

nais inpoh gan
la source

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
plundra
la source
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.

Daniel Sokolowski
la source
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.

Mahesh
la source
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.

jsta
la source
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