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?
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ą.
$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.Jeśli chcesz korzystać z wget, oto sposób na przetestowanie rozmiaru pliku bez pobierania:
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:
do ograniczenia wielkości pobierania do 20 MB.
(kod jest brzydki, wyłącznie w celach informacyjnych).
źródło
Wydaje się, że nie ma rozsądnego sposobu na ustawienie maksymalnego rozmiaru pliku za pomocą wget.
źródło
ulimit
(patrzbash(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
/programming//a/20318140/4364036
źródło