web-dev-qa-db-fra.com

Comment forcer wget à écraser un fichier existant en ignorant l'horodatage?

J'ai essayé '-N' et '--no-clobber' mais le seul résultat que j'obtiens est de récupérer une nouvelle copie de l'example.exe existant avec le numéro un nombre ajouté en utilisant cette synaxe 'example.exe.1'. Ce n'est pas ce que j'aimerais obtenir. J'ai juste besoin de télécharger et d'écraser le fichier example.exe dans le même dossier où j'ai déjà enregistré une copie d'example.com sans que wget vérifie si la mine est plus ancienne ou plus récente respectez le fichier on example.exe déjà présent dans mon dossier de téléchargement . Pensez-vous que je suis possible ou que je dois créer un script qui supprime le fichier example.exe ou peut-être quelque chose qui change sa date de modification, etc.?

24
Andrew Nexintong

Si vous spécifiez le fichier de sortie à l'aide de -O option, il écrasera tout fichier existant.

Par exemple:

wget -O index.html bbc.co.uk

Si vous exécutez plusieurs fois, le fichier index.html sera écrasé.

36
PeterSW

wget ne vous permet pas d'écraser un fichier existant sauf si vous nommez explicitement le fichier de sortie sur la ligne de commande avec l'option -O.

Je suis un peu paresseux et je ne veux pas taper le nom du fichier de sortie sur la ligne de commande alors qu'il est déjà connu à partir du fichier téléchargé. Par conséquent, j'utilise curl comme ceci:

curl -O http://ftp.vim.org/vim/runtime/spell/fr.utf-8.spl

Soyez prudent lorsque vous téléchargez des fichiers comme celui-ci à partir de sites dangereux. La commande ci-dessus écrira un fichier nommé comme le site Web connecté souhaite le nommer (dans le répertoire courant cependant). Le nom final peut être masqué par des redirections et des scripts php ou être obscurci dans l'URL. Vous pourriez finir par écraser un fichier que vous ne souhaitez pas écraser.

Et si jamais vous trouvez un fichier nommé ls ou tout autre nom attrayant dans le répertoire courant après avoir utilisé curl de cette façon, évitez d'exécuter le fichier téléchargé. Il peut s'agir d'un cheval de Troie téléchargé à partir d'un site Web malhonnête ou corrompu!

15
Frédéric Marchal
wget --backups=1 google.com

renomme original fichier avec .1 suffixe et écrit le nouveau fichier dans le nom de fichier voulu.

Pas exactement ce qui a été demandé, mais pourrait être utile dans certains cas.

10
Antony Hatchkins

-c ou --continue

Depuis le manuel :

Si vous utilisez '-c' sur un fichier non vide et que le serveur ne prend pas en charge le téléchargement continu, Wget redémarrera le téléchargement à partir de zéro et écrasera entièrement le fichier existant .

10
3zzy

J'aime l'option -c. J'ai commencé avec la page de manuel puis le web mais j'ai cherché cela plusieurs fois. Comme si vous relayiez une webcam, l'image doit donc toujours être nommée image.jpg. Il semble que cela devrait être plus clair dans la page de manuel.

Je l'utilise depuis quelques années pour télécharger des choses en arrière-plan, parfois combiné avec "limit-rate =" dans mon fichier wgetrc

while true
do
wget -c -i url.txt && break
echo "Restarting wget"
sleep 2
done

Créez un petit fichier appelé url.txt et collez-y l'URL du fichier. Configurez ce script sur votre chemin ou peut-être en tant qu'alias et exécutez-le. Il continue de réessayer le téléchargement jusqu'à ce qu'il n'y ait pas d'erreur. Parfois, à la fin, il entre dans une boucle affichant

 416 Requested Range Not Satisfiable
 The file is already fully retrieved; nothing to do.

mais c'est inoffensif, ctrl-c juste. Je pense qu'il a toujours obtenu le fichier que je voulais même si wget manque de nouvelles tentatives ou que la connexion disparaît temporairement. J'ai téléchargé des choses pendant des jours avec. Une image CD sur modem, oui, toujours avec wget.

2
Alan Corey

Mon cas d'utilisation implique deux URL différentes, parfois la deuxième n'existe pas, mais si elle existe, je veux qu'elle écrase le premier fichier.

Le problème de l'utilisation de wget -O est que, lorsque le deuxième fichier N'EXISTE PAS, il écrasera le premier fichier avec un fichier BLANK.

Donc, la seule façon que j'ai pu trouver est avec une instruction if:

--spider vérifie si un fichier existe et retourne 0 s'il le fait

--quiet échouer tranquillement, sans sortie

-nv est silencieux, mais signale toujours des erreurs

wget -nv https://example.com/files/file01.png -O file01.png
# quietly check if a different version exists
wget --quiet --spider https://example.com/custom-files/file01.png
if [ $? -eq 0 ] ; then    
    # A different version exists, so download and overwrite the first
    wget -nv https://example.com/custom-files/file01.png -O file01.png
fi

C'est verbeux, mais je l'ai trouvé nécessaire. J'espère que cela est utile pour quelqu'un.

0
comfytoday