重定向时如何获取具有正确名称的文件?


117

因此,经过一段时间的Google和超级用户搜索(以及扫描手册页)后,我无法找到答案(我认为应该很简单):

如果您去这里:

http://www.vim.org/scripts/script.php?script_id=2340

并尝试下载主题:

http://www.vim.org/scripts/download_script.php?src_id=9750

像这样:

wget http://www.vim.org/scripts/download_script.php?src_id=9750

您可能最终得到一个名为的文件download_script.php?src_id=9750

但是我希望将其称为molokai.vim,如果使用浏览器下载该文件,将会发生这种情况。

我需要为wget指定哪些选项以达到预期的效果?

我也可以使用Curl等效命令。

Answers:


162
-O file
--output-document=file

这些文档将不会写入适当的文件,但是所有文件将被串联在一起并写入文件。如果-用作文件,文档将被打印到标准输出,从而禁用链接转换。(./-用于打印到字面名称为的文件-.

所以,

wget -O somefile.extension http://www.vim.org/scripts/download_script.php?src_id=9750

或者,wget如果版本支持,则可以使用--content-disposition选项解决此问题。

wget --content-disposition http://www.vim.org/scripts/download_script.php?src_id=9750

请注意手册页中的内容,

--content-disposition

如果将其设置为on,则启用对“ Content-Disposition”标头的实验性(非全功能)支持。当前,这可能会导致针对“ HEAD”请求的服务器额外往返,并且已知会遇到一些错误,这就是当前默认情况下未启用它的原因。

对于某些使用“ Content-Disposition”标头描述下载文件的名称的CGI程序,此选项很有用。

您可以使用curl,使用,

curl -JLO http://www.vim.org/scripts/download_script.php?src_id=9750

-O使用远程名称,并-J强制-O使其从content-disposition标头(而不是URL)获取该名称,并-L在需要时进行重定向。


2
我应该指定这应该是自动的
audio.zoom 2011年

据我了解,wget依赖于网页正确通知它URL是否指向文件,并且需要使用内容配置标头以不同的方式保存它,而wget可能支持也可能不完全支持。因此,您无法使用wget自动完成此操作。根据网页的不同,Curl可能会或多或少地获得成功。
NovemberBitony 2011年

关键是无需复杂的解析就可以编写这些脚本,curl很好,但是到目前为止,我也无法收集到合适的选项
audio.zoom 2011年

2
啊哈-我错了,请参阅最新答案。这就是为什么stackexchange网站运行良好的原因-每个人都学到一些东西,甚至有人回答问题!
AugustBitTony11年

1
这对我来说一直困扰着我一段时间的stackexchange播客。谢谢。
理查德·坎贝尔

75

使用wget,您可以执行以下操作:

wget --trust-server-names <url> 

使用服务器为您提供的最后一个文件名保存文件。


2
我想知道--trust-server-names和之间有什么区别--content-disposition
JamesTheAwesomeDude 2015年

3
貌似--trust-server-names遵循重定向到不同的文件,--content-disposition名字用,而不需要任何转向的响应头中指定的文件名的文件。
阿斯凡德·卡兹

1
为什么没有此默认功能?!?!
hopeseekr

8
@hopeseekr如果您没有仔细观察,服务器可能很顽皮,请调用文件.bashrc。list.gnu.org/archive/html/bug-wget/2012-04/msg00059.html
Patrick Conheady

3

您也可以使用aria2c-与Content-Disposition标头一起使用似乎很好。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.