Предположите, что, я имею 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
также ценится),
Я предложил бы использовать 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, если Вы не перенаправляете его.
От Exchange Стека является этим ответом:
можно использовать curl
для получения размера файла в сети, не загружая его (если веб-сервер предоставляет эту информацию.) Техника детализирована здесь .
Теперь, выполните итерации по списку для получения размера каждого файла:
cat files.lst | xargs -n 1 -I {} curl -sI {} | grep Content-Length | awk '{print $2}'
для получения списка размеров.
РЕДАКТИРОВАНИЕ: можно, конечно, использовать awk
для подведения итогов размеров:
awk '{ sum+=$2 } END { print sum}'