Chcę używać wget
(ze skryptu php) do pobierania plików obrazów, ale nie chcę pobierać plików o określonym rozmiarze.
Czy mogę ograniczyć rozmiar pliku wget
? Jeśli nie, jaki jest lepszy sposób?
Chcę używać wget
(ze skryptu php) do pobierania plików obrazów, ale nie chcę pobierać plików o określonym rozmiarze.
Czy mogę ograniczyć rozmiar pliku wget
? Jeśli nie, jaki jest lepszy sposób?
Odpowiedzi:
Jeśli piszesz pliki do pobrania, powinieneś rozważyć użycie curl
zamiast tego. Wget może analizować dane wyjściowe i rekurencyjnie pobierać całe witryny, ale curl ma znacznie więcej opcji związanych z faktycznym pobieraniem określonego pliku. Oto odpowiednia opcja na stronie man:
--max-filesize
Podaj maksymalny rozmiar (w bajtach) pliku do pobrania. Jeśli żądany plik jest większy niż ta wartość, przesyłanie nie rozpocznie się, a curl powróci z kodem wyjścia 63.
UWAGA: Rozmiar pliku nie zawsze jest znany przed pobraniem, a dla takich plików ta opcja nie działa, nawet jeśli plik transfer ostatecznie jest większy niż ten limit.
Warto zwrócić uwagę na to, że działa tylko w przypadku niektórych plików. Klient jest zależny od serwera, aby zgłosić, jak duży będzie plik, zanim rozpocznie się pobieranie. Większość, ale z pewnością nie wszystkie serwery to zgłaszają.
Jeśli chcesz korzystać z wget, oto sposób na przetestowanie rozmiaru pliku bez pobierania:
wget --spider $URL 2>&1 | awk '/Length/ {print $2}'
gdzie $URL
jest oczywiście adres URL pliku, który chcesz pobrać.
Możesz więc warunkować swój skrypt na podstawie danych wyjściowych. Jak na przykład:
{ [ $(wget --spider $URL 2>&1 | awk '/Length/ {print $2}') -lt 20971520 ] && wget $URL; } || echo file to big
do ograniczenia wielkości pobierania do 20 MB.
(kod jest brzydki, wyłącznie w celach informacyjnych).
Wydaje się, że nie ma rozsądnego sposobu na ustawienie maksymalnego rozmiaru pliku za pomocą wget.
ulimit
(patrz bash(1)
, setrlimit(2)
) również będzie działać wget(1)
, choć jest nieco ciężkie.
wget ma -Q
--quota
opcję, która ogranicza maksymalną liczbę pobrań, gdy podano kilka adresów URL (lista rekurencyjna lub wejściowa).
https://www.gnu.org/software/wget/manual/html_node/Download-Options.html
$n
bajtów:(ulimit -f $(($n/512)); curl --max-filesize $n …)
.curl
przerwie z błędem, jeśli rozmiar pliku przekroczy$n/512
512-bajtowe bloki.