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?
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?
Antworten:
Wenn Sie Skripte für Downloads erstellen, sollten Sie curl
stattdessen 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.
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 $URL
ist 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).
Es scheint keine vernünftige Möglichkeit zu geben, mit wget eine maximale Dateigröße festzulegen.
ulimit
(siehe bash(1)
, setrlimit(2)
) wird auch funktionieren wget(1)
, obwohl es ein bisschen hartnäckig ist.
wget hat eine -Q
--quota
Option, die die maximale Downloadmenge begrenzt, wenn mehrere URLs (rekursive oder Eingabelisten) angegeben werden.
https://www.gnu.org/software/wget/manual/html_node/Download-Options.html
$n
Bytes:(ulimit -f $(($n/512)); curl --max-filesize $n …)
.curl
wird mit einem Fehler abgebrochen, wenn die Dateigröße$n/512
512-Byte-Blöcke überschreitet.