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
也值得赞赏)
我建议使用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 静音。它仍然会输出您要求的数据,甚至可能输出到终端/标准输出,除非您重定向它。