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

aud*_*oom 135 linux wget redirection command-line curl

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

如果你去这里:

http://www.vim.org/scripts/script.php?script_id=2340
Run Code Online (Sandbox Code Playgroud)

并尝试下载主题:

http://www.vim.org/scripts/download_script.php?src_id=9750
Run Code Online (Sandbox Code Playgroud)

像这样:

wget http://www.vim.org/scripts/download_script.php?src_id=9750
Run Code Online (Sandbox Code Playgroud)

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

但我希望它被调用molokai.vim,如果我使用浏览器下载这个文件,就会发生这种情况。

我需要为 wget 指定哪些选项以获得所需的效果?

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

Eig*_*ony 184

-O file
--output-document=file
   
Run Code Online (Sandbox Code Playgroud)

文档不会写入适当的文件,但所有文件都将连接在一起并写入文件。如果-用作文件,文档将打印到标准输出,禁用链接转换。(./-用于打印到字面上名为 的文件-.

所以,

-O file
--output-document=file
   
Run Code Online (Sandbox Code Playgroud)

或者,你可以得到wget自动使用服务器提议的文件名使用--content-disposition的选择,如果你的版本支持。

wget -O somefile.extension 'http://www.vim.org/scripts/download_script.php?src_id=9750'
Run Code Online (Sandbox Code Playgroud)

根据手册页的警告,

--content-disposition
Run Code Online (Sandbox Code Playgroud)

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

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

您可以使用curl,使用,实现相同的自动化行为

wget --content-disposition 'http://www.vim.org/scripts/download_script.php?src_id=9750'
Run Code Online (Sandbox Code Playgroud)

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

  • 我应该指定这需要是自动的 (2认同)
  • 啊哈 - 我错了,请参阅更新的答案。这就是 stackexchange 站点运行良好的原因 - 每个人都会学到一些东西,甚至是回答问题的人! (2认同)
  • `--content-disposition` 效果很好(至少在我键入此内容时它似乎正在下载正确的文件),而 `curl -JLO` 则没有成功。我对使用这两种工具都很陌生,所以我想知道为什么会出现这种差异。 (2认同)

小智 89

使用 wget 你可以这样做:

wget --trust-server-names <url> 
Run Code Online (Sandbox Code Playgroud)

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

  • @hopeseekr 服务器可能很顽皮,如果您不仔细观察,就会调用文件 .bashrc。https://lists.gnu.org/archive/html/bug-wget/2012-04/msg00059.html (13认同)
  • 我想知道 `--trust-server-names` 和 `--content-disposition` 之间有什么区别 (5认同)
  • 看起来 `--trust-server-names` 跟随重定向到不同的文件,并且 `--content-disposition` 使用响应头中指定的名称命名文件,无需任何重定向。 (3认同)
  • 为什么没有这个默认功能?!?! (3认同)

dka*_*kam 5

您还可以使用aria2c - 它似乎与 Content-Disposition 标头配合得很好。