Como obter o tamanho total de download de uma lista?

1

Imagine que eu tenho download-list.txt . Ele contém alguns URLs de arquivos:

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

Quando executo wget -i download-list.txt --spider , é mostrado como:

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]
...

Mas não preciso de tamanho de arquivo individual, preciso do tamanho total do arquivo:

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

Como conseguir este resultado? (Qualquer outro método sem wget também é apreciado)

    
por Olimjon 23.05.2018 / 17:59

2 respostas

5

Eu sugiro usar curl :

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

O curl imprimirá as informações do cabeçalho ( qual arquivo? ) como como abaixo, que contém "Content-Length" em bytes (se o servidor remoto puder fornecer isso); em seguida, com awk , estamos somando a segunda coluna, que é o tamanho do arquivo para a linha, se combinado com Content-Length e, na tela END, o tamanho total salvo na variável 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

de man curl

-I, --head
(HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature the command HEAD which this uses to get nothing but the header of a document. When used on an FTP or FILE file, curl displays the file size and last modification time only.

-s, --silent
Silent or quiet mode. Don't show progress meter or error messages. Makes Curl mute. It will still output the data you ask for, potentially even to the terminal/stdout unless you redirect it.

    
por devWeek 23.05.2018 / 18:38
-1

De Stack Exchange é esta resposta:

Você pode usar curl para obter o tamanho de um arquivo na Web sem baixá-lo (contanto que o servidor da Web forneça essas informações.) A técnica é detalhada aqui .

Agora, repita a lista para obter o tamanho de cada arquivo:

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

para obter a lista de tamanhos.

EDIT: Você pode usar o awk para somar os tamanhos:

awk '{ sum+=$2 } END { print sum}'
    
por WinEunuuchs2Unix 24.05.2018 / 03:35