So lassen Sie wget Dateien überschreiben

9

wgetWie kann ich mit dem Befehl zulassen / anweisen, meine lokale Datei jedes Mal zu überschreiben, unabhängig davon, wie oft ich sie aufrufe?

Angenommen , ich möchte eine Datei vom Speicherort herunterladen: http: //server/folder/file1.html

Wenn ich hier sage wget http://server/folder/file1.html, möchte ich, dass dies file1.htmlin meinem lokalen System überschrieben wird, unabhängig davon , wann es geändert, bereits heruntergeladen usw. wird. Meine Absicht / mein Anwendungsfall hier ist, dass ich sehr sicher bin, wenn ich wget anrufe um die vorhandene Datei zu ersetzen / zu überschreiben.

Ich habe die folgenden Optionen ausprobiert, aber jede Option ist für einen anderen Zweck vorgesehen.

  1. -nc => --no-clobber
  2. -N => Zeitstempel einschalten
  3. -r => Aktiviert das rekursive Abrufen
Gnanam
quelle

Antworten:

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

-q ist ein leiser Modus, sodass Sie ihn ohne Ausgabe des Befehls in einen Cron werfen können

aleroot
quelle
Es gibt keine direkte Option im wgetBefehl, die dies tut, ohne dass ich explizit mit -O filename?
Gnanam
3
Es scheint, dass es keine Möglichkeit gibt, das Herunterladen aller Dateien zu erzwingen, wenn Dateien mit wget heruntergeladen werden. Die Option -N kann jedoch das Herunterladen und Überschreiben neuer Dateien erzwingen. wget -N Überschreibt die Originaldatei, wenn sich Größe oder Zeitstempel ändern
aleroot
Nicht wahr. Leiten Sie die Ausgabe des Befehls in stdout und leiten Sie sie an die Datei weiter: wget -q $ urlYouNeedToGrap> $ fileYouWantToOverwriteEverytime
rasjani
8

Diese Option funktioniert

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

die Info

-N,  --timestamping            don't re-retrieve files unless newer than
                               local.
Steven Penny
quelle
4

Verwenden Sie curlstattdessen?

curl http://server/folder/file1.html > file1.html
Stu Thompson
quelle
Ich bin kein Linux-Experte. Was ist der grundlegende Unterschied zwischen wgetund curl? Ich bin sicher, dass jeder Befehl für einen bestimmten Zweck bestimmt ist.
Gnanam
1
@Gnanam: Sie überschneiden sich im grundlegenden CLI-Dienstprogramm tatsächlich stark. Beide können eine HTTP-Verbindung herstellen und das Ergebnis auf der Festplatte speichern. Informationen zu den Unterschieden finden Sie unter daniel.haxx.se/docs/curl-vs-wget.html. Unabhängig davon ist die oben genannte Verwendung vollständig gültig. Es gibt auch andere Tools in diesem allgemeinen Bereich: curl.haxx.se/docs/comparison-table.html
Stu Thompson
Diese beiden Links sind wirklich hilfreich, um den Unterschied zu verstehen.
Gnanam
0

Ich glaube nicht, dass Sie dies tun können, wenn Sie nicht auch die Verzeichnisse herunterladen (übergeben Sie also das Flag -x). Wenn Sie wissen, was die Datei ist, können Sie -O Dateiname verwenden, zum Beispiel:
wget http://yourdomain.com/index.html -O index.html

James L.
quelle
0

Ungetrocknet: Vielleicht kannst du damit arbeiten wget -r --level=0.

Eine andere Möglichkeit: curl -OÜberschreiben (es wird jedoch eine andere Methode zur Auswahl des Dateinamens verwendet, die für Sie möglicherweise von Bedeutung ist oder nicht).

Gilles 'SO - hör auf böse zu sein'
quelle
Diese wgetZeile macht nicht wirklich das Richtige, weil sie eine Hierarchie von Unterverzeichnissen erstellt. curl -OAuf der anderen Seite wird die Datei korrekt heruntergeladen und vorhandene Kopien überschrieben.
etw
0

Warum nicht einen kleinen Wrapper um das Wget in Ihrem Skript legen?

Das Skript kann alle Dateien an einen temporären Speicherort verschieben und dann die entfernten Dateien / Webseiten abrufen.

Bei Erfolg löschen Sie die Dateien am temporären Speicherort. Bei einem Fehler verschieben Sie die Dateien zurück und lösen einen Fehler aus.

Es gibt keine einfache Möglichkeit, mit wget das zu tun, was Sie möchten, es sei denn, Sie kennen den Namen aller Dateien genau. In diesem Fall können Sie mit der Option -O den Dateinamen der heruntergeladenen Datei erzwingen.

Richard Holloway
quelle