Comment permettre à wget d'écraser des fichiers


9

À l'aide de la wgetcommande, comment puis-je autoriser / demander à écraser mon fichier local à chaque fois, quel que soit le nombre de fois que j'appelle.

Disons que je souhaite télécharger un fichier depuis l'emplacement: http: //server/folder/file1.html

Ici, chaque fois que je dis wget http://server/folder/file1.html, je veux que cela file1.htmlsoit écrasé dans mon système local quelle que soit l'heure à laquelle il est changé, déjà téléchargé, etc. Mon intention / cas d'utilisation ici est que lorsque j'appelle wget, je suis très sûr que je veux pour remplacer / écraser le fichier existant.

J'ai essayé les options suivantes, mais chaque option est destinée / destinée à une autre fin.

  1. -nc => --no-clobber
  2. -N => Activer l'horodatage
  3. -r => Activer la récupération récursive

Réponses:


7
wget -q http://www.whatever.com/filename.txt -O /path/filename.txt 

-q est un mode silencieux, vous pouvez donc le jeter dans un cron sans aucune sortie de la commande


Il n'y a pas d'option directe dans la wgetcommande qui le fasse sans que je spécifie explicitement en utilisant -O filename?
Gnanam

3
Il semble qu'il n'y ait aucun moyen de forcer l'écrasement de tous les fichiers lors du téléchargement de fichiers à l'aide de wget. Cependant, utiliser l'option -N peut sûrement forcer le téléchargement et le remplacement de fichiers plus récents. wget -N Remplacera le fichier d'origine si la taille ou l'horodatage changent
aleroot

Pas vrai. diriger la sortie de la commande dans stdout et la diriger vers le fichier: wget -q $ urlYouNeedToGrap> $ fileYouWantToOverwriteEverytime
rasjani

8

Cette option fonctionne

wget -N http://server/folder/file1.html

Info

-N,  --timestamping            don't re-retrieve files unless newer than
                               local.

4

Utiliser à la curlplace?

curl http://server/folder/file1.html > file1.html

Je ne suis pas un expert Linux. Quelle est la différence fondamentale entre wgetet curl? Je suis sûr que chaque commande est destinée à un usage spécifique.
Gnanam

1
@Gnanam: En fait, ils se chevauchent beaucoup dans l'utilitaire CLI de base. Les deux peuvent établir une connexion HTTP et enregistrer le résultat sur le disque. Pour une analyse des différences, consultez daniel.haxx.se/docs/curl-vs-wget.html Quoi qu'il en soit, l'utilisation ci-dessus est entièrement valide. Il existe également d'autres outils dans ce domaine général: curl.haxx.se/docs/comparison-table.html
Stu Thompson

Ces 2 liens sont vraiment utiles pour comprendre la différence.
Gnanam

0

Je ne pense pas que vous puissiez le faire à moins de télécharger également les répertoires (passez donc le drapeau -x). Si vous savez ce qu'est le fichier, vous pouvez utiliser -O nom de fichier, par exemple:
wget http://yourdomain.com/index.html -O index.html


0

Non essayé: vous pouvez peut-être travailler avec wget -r --level=0.

Autre possibilité: curl -Oécrase (mais il utilise une manière différente de choisir le nom du fichier, qui peut ou non vous intéresser).


Cette wgetligne ne fait pas vraiment la bonne chose car elle crée une hiérarchie de sous-répertoires. curl -Od'autre part télécharge correctement le fichier, écrasant les copies existantes.
STH

0

Pourquoi ne pas mettre un petit wrapper autour du wget dans votre script?

Le script pourrait déplacer tous les fichiers vers un emplacement temporaire, puis sauvegarder les fichiers / pages Web distants.

En cas de succès, supprimez les fichiers dans l'emplacement temporaire. En cas d'échec, ramenez les fichiers en arrière et générez une erreur.

Il n'y a pas de moyen simple de faire ce que vous voulez en utilisant simplement wget à moins que vous ne connaissiez spécifiquement le nom de tous les fichiers, auquel cas l'option -O vous permettra de forcer le nom du fichier téléchargé.

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.