LINUX.ORG.RU

Как ограничить объём скачиваемого wget'ом?

 ,


0

3

Имеется некоторый тарифный план мобильного интернета, который позволяет раз в сутки скачать 100МБ трафика.
Допустим, возникла необходимость скачать iso образ одного из линукс дистрибутивов, равный ~700МБ.

Вопрос: Как сказать wget'у, чтобы он скачал не больше этих 100МБ и завершил свою работу?
(наблюдение за ходом загрузки и прибивание wget'а в нужный момент не предлогать)
Или если wget такого не умеет, посоветуйте другую консольную утилиту.

Ты ман читал?

-Q quota
       --quota=quota
           Specify download quota for automatic retrievals.  The value can be specified in bytes (default), kilobytes (with k suffix), or megabytes (with
           m suffix).

           Note that quota will never affect downloading a single file.  So if you specify wget -Q10k ftp://wuarchive.wustl.edu/ls-lR.gz, all of the
           ls-lR.gz will be downloaded.  The same goes even when several URLs are specified on the command-line.  However, quota is respected when
           retrieving either recursively, or from an input file.  Thus you may safely type wget -Q2m -i sites---download will be aborted when the quota
           is exceeded.

           Setting quota to 0 or to inf unlimits the download quota.
mandala ★★★★★
()
Ответ на: комментарий от issumbosy

тему можно сносить

Не-не! Отметить решенной.

Хелп — краткая справка. Маны более полные, всегда и их надо смотреть (не зря в них отправляют). Иногда ман такой же как и хелп, но это для скорее исключение.

mandala ★★★★★
()
Ответ на: комментарий от mandala

Маны более полные, всегда и их надо смотреть

Не могу не заметить, что в случае с обильно документированными программами GNU, в частности и Wget’ом, man — это тоже сокращенная версия руководства. Полная же — пишется в формате Texinfo; локально изучается пользователем в Емаксе (<f1> i m wget), а теми, у кого по какой-то причине не установлен Емакс, при помощи довольно хилой читалки ($ info wget), ну или загружается в разных форматах из Сети [0].

[0] https://www.gnu.org/software/wget/manual/

Zmicier ★★★★★
()
Ответ на: Ты ман читал? от mandala

Ты ман читал?

А вы читали?

А то образ ФС (ИСО 9660) диска — это, как правило, один единственный файл, если что.

Zmicier ★★★★★
()

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

wget на таком низком уровне, емнип, не управляется, возьмите curl, ну и ГНУ Баш для арифметики.

Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

Ну то есть как-то так, если нигде не вру (проверьте!):

#!/bin/bash

quota=$((100 * 2**20))

uri="$1"
file="${uri##*/}"

size="$(stat -c '%s' "$file")"
start=$((size ? size : 0))

curl "$uri" >> "$file" --range "${start}-$((start + quota))"

Ну и проверками всякими обернуть не помешает.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: Ты ман читал? от mandala

Увы, но как оказалось, в моём случае quota не подходит для ограничения объёма скачиваемого файла.

# echo "test lor advices" > /var/www/html/test.txt

$ wget --quota=5 -i http://localhost/test.txt
http://localhost/test.txt
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 17 [text/plain]
Saving to: ‘test.txt’

100%[====================================================================================>] 17          --.-K/s   in 0s      

(429 KB/s) - ‘test.txt’ saved [17/17]

No URLs found in http://localhost/test.txt.
FINISHED
Total wall clock time: 0,02s
Downloaded: 1 files, 17 in 0s (429 KB/s)
Download quota of 5 EXCEEDED!

Вместо того, чтобы скачать первые 5 байт, файл вытягивается целиком.
Хорошо, что хватило ума заранее проверить.

issumbosy
() автор топика
Ответ на: комментарий от grem

да, написано, по тому и перепроверил, чтоб не влететь в минус.

issumbosy
() автор топика
Ответ на: комментарий от urxvt

Использовать http заголовок Range в wget, было бы предпочтительней нежели в curl, но он у меня не работает.

wget --header="Range: bytes=5-7" http://localhost/test.txt
http://localhost/test.txt
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 206 Partial Content
Retrying.

(try: 2)  http://localhost/test.txt
Connecting to localhost (localhost)|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 206 Partial Content
Retrying.

и тд..
issumbosy
() автор топика
Ответ на: комментарий от urxvt

Думаю достаточно wget'у передать заголовок Range.

А вот и нет, как выясняется! [0]

Да и потом никто не говорил, что в задаче HTTP сервер. Возможно, FTP, — а там запрос диапазона выглядит совсем иначе.

[0] https://savannah.gnu.org/bugs/?func=detailitem&item_id=20416

Zmicier ★★★★★
()
Ответ на: комментарий от issumbosy

Zmicier, спасибо. буду пользоваться курлом.

Да всегда пожалуйста. А какие, собственно, любопытно было знать, были проблемы с доступностью Курла?

Zmicier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.