如何让wget以正确的文件名保存

5
当我前往ISC 这里 下载BIND时,我的浏览器会自动正确保存已下载的文件。例如,如果我点击9.9.4-P2的下载按钮,它会弹出一个窗口,如果我在右侧点击“BIND 9.9.4-P2 - tar.gz”按钮,则浏览器会自动将下载的文件保存为“bind-9.9.4-P2.tar.gz”。
但是,我想通过Linux上的wget进行下载。所以我右键单击了“BIND 9.9.4-P2 - tar.gz”按钮并复制了链接,该链接为“https://www.isc.org/downloads/file/bind-9-9-4-p1-tar-gz/?version=tar.gz”。
现在,当我发出以下命令时,它将把它保存为“index.html?version=tar.gz”。现在我知道我可以给它提供-O选项并明确指定保存的文件名,但是否有一种类似于我的浏览器自动执行此操作的方式呢?
wget https://www.isc.org/downloads/file/bind-9-9-4-p1-tar-gz/?version=tar.gz
2个回答

17

在HTTP级别上,服务器通过HTTP响应中的Content-Disposition头部字段向客户端发送文件名信息:

HTTP/1.1 200 OK
[…]
Content-Disposition: attachment; filename="bind-9.9.4-P2.tar.gz";

请参阅RFC2183了解Content-Disposition头字段的详细信息。

根据其手册,wget对此功能具有实验性支持:

   --content-disposition
      If this is set to on, experimental (not fully-functional) support for
      "Content-Disposition" headers is enabled. This can currently result in
      extra round-trips to the server for a "HEAD" request, and is known to
      suffer from a few bugs, which is why it is not currently enabled by
      default.
因此,如果您选择启用它,请指定 --content-disposition 选项。(您也可以使用 curl 而不是 wget 来执行此操作,但问题是关于 wget 的。)

你太棒了!我先尝试使用curl,但发现它不起作用,并在某个地方看到我需要一个较新的版本(即7.21.2或更高版本)。这很令人惊讶,因为最新的CentOS 6.5(Final)版本似乎只安装了Curl 7.19.0!我又尝试使用wget并加上--content-disposition参数,结果完美无缺。 - user192702

8
你可以将 content-disposition 参数设置为默认激活状态。
只需编辑 /etc/wgetrc 或 ~/.wgetrc 文件,并追加 content-disposition = on。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接