Как получить общий размер загрузки списка?

Предположите, что, я имею download-list.txt. Это содержит некоторые URL файла:

http://example.com/a.txt
http://example.com/b.txt
http://example.com/c.txt
http://example.com/d.txt
http://example.com/e.txt

Когда я работаю wget -i download-list.txt --spider, это показывает как:

http://example.com/a.txt
...
Length: 128 (128B) [text/txt]
...
http://example.com/b.txt
...
Length: 120 (120B) [text/txt]
...
http://example.com/c.txt
...
Length: 100 (100B) [text/txt]
...
http://example.com/d.txt
...
Length: 90 (90B) [text/txt]
...
http://example.com/e.txt
...
Length: 80 (80B) [text/txt]
...

Но, мне не нужен отдельный размер файла, мне нужен общий размер файла:

518 (128+120+100+90+80)

Как достигнуть этого результата? (Любые другие методы без wget также ценится),

1
задан 29 May 2018 в 06:20

2 ответа

Я предложил бы использовать curl:

<download-list.txt xargs -n1 curl -sI |
  awk '/[cC]ontent-[lL]ength/{total_size+=$2} END{ print total_size " bytes" }'

curl распечатает информацию заголовка (который файл?) так же как ниже этого содержит "Content-Length" в байтах (если удаленный сервер может обеспечить это); затем с awk мы суммируем второй столбец, который является размером файла для строки, если подобрано Content-Length и в КОНЦЕ печатают общий размер, сохраненный в total_size переменная.

HTTP/1.1 200 OK
Content-Length: 1921843200
Content-Type: application/x-iso9660-image
ETag: "728d0000-56ac4c63786e2"
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Thu, 26 Apr 2018 18:44:15 GMT
Connection: keep-alive
Date: Wed, 23 May 2018 16:45:08 GMT

от man curl

- Я, - голова
(HTTP/FTP/ФАЙЛ) Выборка HTTP-заголовок только! Серверы HTTP показывают команду HEAD, которую это использует для получения только заголовка документа. При использовании на FTP или файле ФАЙЛА завихрение отображает размер файла и время последнего изменения только.

- s, - тихий
Тихий или тихий режим. Не показывайте метр прогресса или сообщения об ошибках. Делает Вихревой бесшумный режим. Это все еще произведет данные, которые Вы просите, потенциально даже к terminal/stdout, если Вы не перенаправляете его.

5
ответ дан 3 December 2019 в 06:37

От Exchange Стека является этим ответом:

можно использовать curl для получения размера файла в сети, не загружая его (если веб-сервер предоставляет эту информацию.) Техника детализирована здесь .

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

cat files.lst | xargs -n 1 -I {} curl -sI {} | grep Content-Length | awk '{print $2}'

для получения списка размеров.

РЕДАКТИРОВАНИЕ: можно, конечно, использовать awk для подведения итогов размеров:

awk '{ sum+=$2 } END { print sum}'
-1
ответ дан 24 September 2019 в 01:49

Другие вопросы по тегам:

Похожие вопросы: