如何获取列表的总下载大小?

Oli*_*jon 1 command-line files wget

想象一下,我有download-list.txt。它包含一些文件网址:

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
Run Code Online (Sandbox Code Playgroud)

当我运行时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]
...
Run Code Online (Sandbox Code Playgroud)

但是,我不需要单个文件大小,我需要总文件大小:

518 (128+120+100+90+80)
Run Code Online (Sandbox Code Playgroud)

如何达到这个结果?(不使用的任何其他方法wget也值得赞赏)

αғs*_*нιη 5

我建议使用curl

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

curl将打印头信息(哪个文件?)如象下面包含"Content-Length"在字节(如果远程服务器可以提供); 然后awk我们将总结第二列,如果匹配,则该列是该行的文件大小,Content-Length并在 END 打印保存在total_size变量中的总大小。

HTTP/1.1 200 OK
内容长度:1921843200
内容类型:应用程序/x-iso9660-image
ETag:“728d0000-56ac4c63786e2”
服务器:Apache/2.4.18 (Ubuntu)
最后修改时间:2018 年 4 月 26 日星期四 18:44:15 GMT
连接:保持连接
日期:2018 年 5 月 23 日星期三 16:45:08 GMT

man curl

-I, --head
(HTTP/FTP/FILE) 仅获取 HTTP 标头!HTTP 服务器具有 HEAD 命令,该命令用于获取文档头信息。当用于 FTP 或 FILE 文件时,curl 仅显示文件大小和上次修改时间。

-s, --silent
静默或安静模式。不要显示进度表或错误消息。使 Curl 静音。它仍然会输出您要求的数据,甚至可能输出到终端/标准输出,除非您重定向它。