通常,人们会下载以文件扩展名结尾的 URL 的文件。
要下载 Ubuntu ISO,只需
wget http://releases.ubuntu.com/14.04.3/ubuntu-14.04.3-desktop-amd64.iso
然而,我遇到了一个我怀疑使用 ASP.Net / IIS 的网站。
ISO 的链接格式如下(我删除了链接内容,以防……政策):
http://some.ip.in.here/website.com/IMAGENAME.ISO?md5=hUhpyFjk7zEskw06ZhrWAQ&expires=1454811899
我不确定如何下载它,因为它有 MD5 和到期时间作为参数,所以 wget 只下载网页,而不是这个 ISO。
有什么建议么?
答案1
使用
wget "http://some.ip.in.here/website.com/IMAGENAME.ISO?md5=hUhpyFjk7zEskw06ZhrWAQ&expires=1454811899"
解释:URL 中有“&”字符。在 Linux 和类似系统上,这使其成为后台进程。
解决方案是将 url 括在双引号 ( "
) 中,以便将其视为一个参数。
答案2
如果你只是想从复杂的 URL 中获取一个合理的文件名,你可以使用输出文件选项。
-O file
--output-document=file
这两种形式都可以。
如前所述,确保命令解析器不会解释 URL 中的任何特殊字符。
答案3
有两种方法可以做到这一点卷曲。
在第一种方法中,您将使用-O
标志根据 URL 中的远程名称写出文件;在这种情况下,它很可能会将文件写出到系统中IMAGENAME.ISO?md5=hUhpyFjk7zEskw06ZhrWAQ&expires=1454811899
;请注意 URL 值是如何包含在双引号中的,因为&
和?
可能会被误解为 Bash 命令:
curl -O -L "http://some.ip.in.here/website.com/IMAGENAME.ISO?md5=hUhpyFjk7zEskw06ZhrWAQ&expires=1454811899";
虽然该方法在技术上“有效”,但文件名充其量也令人困惑。因此,在另一种方法中,您可以使用输出重定向(>
在 URL 后跟文件名)将文件内容输出到名为的文件IMAGENAME.ISO
:
curl -L "http://some.ip.in.here/website.com/IMAGENAME.ISO?md5=hUhpyFjk7zEskw06ZhrWAQ&expires=1454811899" > "IMAGENAME.ISO";
所以如果你问我,第二种方法最适合大多数普通用途。还请注意-L
两个命令中使用的标志;该命令告诉 Curl 遵循文件下载 URL 可能具有的任何重定向链接,因为下载服务上的文件很多时候会重定向几次,然后才能到达目标有效负载文件。