如何在 Linux 中通过 URL 下载文件

如何在 Linux 中通过 URL 下载文件

通常,人们会下载以文件扩展名结尾的 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 可能具有的任何重定向链接,因为下载服务上的文件很多时候会重定向几次,然后才能到达目标有效负载文件。

相关内容