【发布时间】:2011-08-08 17:30:40
【问题描述】:
我想知道是否有办法提前检查我可能通过wget 下载的文件的大小?我知道使用 --spider 选项可以告诉我文件是否存在,但我也有兴趣查找该文件的大小。
【问题讨论】:
标签: command-line wget
我想知道是否有办法提前检查我可能通过wget 下载的文件的大小?我知道使用 --spider 选项可以告诉我文件是否存在,但我也有兴趣查找该文件的大小。
【问题讨论】:
标签: command-line wget
嗯.. 对我来说 --spider 确实显示大小:
$ wget --spider http://henning.makholm.net/
Spider mode enabled. Check if remote file exists.
--2011-08-08 19:39:48-- http://henning.makholm.net/
Resolving henning.makholm.net (henning.makholm.net)... 85.81.19.235
Connecting to henning.makholm.net (henning.makholm.net)|85.81.19.235|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9535 (9.3K) [text/html] <-------------------------
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.
$
(但请注意,并非所有 Web 服务器都会通知客户端数据的长度,除非在数据全部发送完毕后关闭连接。)
如果您担心 wget 更改它报告长度的格式,您可以使用 wget --spider --server-response 并在输出中查找 Content-Length 标头。
【讨论】:
wget http://example.com --spider --server-response -O - 2>&1 | sed -ne '/Content-Length/{s/.*: //;p}'
--> SIZE filename.ext 213 ########
Length: unspecified [application/zip]@Henning Makholm
curl --head URL
在输出中查找“Content-Length:”。
感谢 Henning Makholm 的评论:
wget --spider URL
并在输出中查找“长度:”。
【讨论】:
wget 会更令人愉悦 (-:
wget -S (wget --server-response) 显示相同的标头信息,但随后它继续下载文件,因此这对问题没有用处。我没有看到 wget 在不获取文件的情况下显示标题的选项。例如,“tries=0”表示无限重试。
wget 仅执行 HEAD 的选项拼写为 --spider。
我实际上是在寻找目录的大小,谷歌把我带到了这里。虽然这里没有直接的答案,但接受的答案帮助我在它之上构建了以下命令:
wget --spider -m -np URL-to-dir 2>&1 | sed -n -e /unspecified/d -e '/^Length: /{s///;s/ .*//;p}' | paste -s -d+ | bc
上面的代码在整个目录的蜘蛛模式下运行wget,最终记录该目录中每个文件的长度。然后将输出通过管道传送到sed 以提取数字序列(字节大小)。管道中的最后两个组件只是帮助将其相加得到总字节数。
【讨论】: