Как я могу ограничить размер загружаемого файла в wget?


13

Я хочу использовать wget(из сценария php) для загрузки файлов изображений, но не хочу загружать файлы определенного размера.

Могу ли я ограничить размер файла wget? Если нет, что лучше?

Ответы:


14

Если вы загружаете сценарии, вы должны рассмотреть возможность использования curlвместо этого. Wget может анализировать выходные данные и рекурсивно извлекать целые сайты, но у curl есть гораздо больше опций, относящихся к фактической загрузке определенного файла. Вот соответствующая опция на странице руководства:

--max-filesize
Укажите максимальный размер (в байтах) файла для загрузки. Если запрашиваемый файл больше этого значения, передача не начнется, и curl вернется с кодом выхода 63.
ПРИМЕЧАНИЕ. Размер файла не всегда известен до загрузки, и для таких файлов этот параметр не действует, даже если файл передача оказывается больше, чем этот предел.

Стоит учесть, что это работает только для некоторых файлов. Клиент зависит от сервера, чтобы сообщить, насколько большим будет файл, прежде чем он начнет загрузку. Большинство, но, конечно, не все серверы сообщают об этом.


6
Вы можете совместить это с ограничением системы , чтобы запретить локон от создания файла больше , чем $nбайты: (ulimit -f $(($n/512)); curl --max-filesize $n …). curlбудет прервана с ошибкой, если размер файла превысит $n/512512-байтовые блоки.
Жиль "ТАК - перестань быть злым"

Вы также можете httrack.
Ви.

6

Если вы хотите использовать wget, вот способ проверить размер файла без загрузки:

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

где $URL, конечно, находится URL файла, который вы хотите скачать.

Таким образом, вы можете подготовить свой сценарий на основе результатов. такие как:

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

для ограничения размера загрузки до 20 МБ.

(код некрасив, только в ознакомительных целях).


1

Кажется, нет разумного способа установить максимальный размер файла с помощью wget.


2
Подход Жиля с ulimit(см. bash(1), setrlimit(2)) Также будет работать wget(1), хотя это немного жестко.
Сарнольд

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.