Wie kann ich die heruntergeladene Dateigröße in wget begrenzen?

13

Ich möchte wget(von einem PHP-Skript) zum Herunterladen von Bilddateien verwenden, möchte jedoch keine Dateien über eine bestimmte Größe herunterladen.

Kann ich die Dateigröße mit einschränken wget? Wenn nicht, was ist ein besserer Weg?

T. Brian Jones
quelle

Antworten:

14

Wenn Sie Skripte für Downloads erstellen, sollten Sie curlstattdessen die Verwendung in Betracht ziehen . Wget kann die Ausgabe analysieren und rekursiv ganze Sites abrufen, aber Curl bietet weitaus mehr Optionen in Bezug auf den tatsächlichen Download einer bestimmten Datei. Hier ist die entsprechende Option in der Manpage:

--max-filesize Geben Sie
die maximale Größe (in Byte) einer herunterzuladenden Datei an. Wenn die angeforderte Datei größer als dieser Wert ist, wird die Übertragung nicht gestartet und die Wellung wird mit dem Beendigungscode 63 zurückgegeben.
HINWEIS: Die Dateigröße ist vor dem Herunterladen nicht immer bekannt. Bei solchen Dateien hat diese Option auch dann keine Auswirkung, wenn die Datei vorhanden ist Die Übertragung ist am Ende größer als dieses vorgegebene Limit.

Der Hinweis, dass dies nur für einige Dateien funktioniert, ist erwägenswert. Der Client ist darauf angewiesen, dass der Server meldet, wie groß die Datei sein wird, bevor der Download beginnt. Die meisten, aber sicherlich nicht alle Server melden dies.

Caleb
quelle
6
Sie können mit einer Systemgrenze kombinieren diese curl zu verbieten, eine Datei größer als die Schaffung $nBytes: (ulimit -f $(($n/512)); curl --max-filesize $n …). curlwird mit einem Fehler abgebrochen, wenn die Dateigröße $n/512512-Byte-Blöcke überschreitet.
Gilles 'SO- hör auf böse zu sein'
Sie können auch Sie verfolgen.
Vi.
6

Wenn Sie wget verwenden möchten, können Sie hier die Größe der Datei testen, ohne sie herunterladen zu müssen:

wget --spider $URL 2>&1 | awk '/Length/ {print $2}'

Wo $URList die URL der Datei, die Sie herunterladen möchten?

So können Sie Ihr Skript basierend auf der Ausgabe konditionieren. sowie:

{ [ $(wget --spider $URL 2>&1 | awk '/Length/ {print $2}') -lt 20971520 ] && wget $URL; } || echo file to big

zur Begrenzung der Downloadgröße auf 20 MB.

(Der Code ist hässlich, nur zu Informationszwecken).

Philomath
quelle
1

Es scheint keine vernünftige Möglichkeit zu geben, mit wget eine maximale Dateigröße festzulegen.

T. Brian Jones
quelle
2
Gilles 'Herangehensweise an ulimit(siehe bash(1), setrlimit(2)) wird auch funktionieren wget(1), obwohl es ein bisschen hartnäckig ist.
Sarnold