如何使用 wget 获取具有特定名称的文件?

如何使用 wget 获取具有特定名称的文件?

我在 Amazon Linux 上使用 bash。

当我在浏览器中访问以下网址时,https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US,我得到一个文件,firefox-56.0.1.tar.bz2。然而,当我使用 wget 时,下载的文件的标题中有一个“index.html”,即使它看起来像同一个文件。所以我尝试了

wget -r --no-parent --reject "index.html*" -nH --cut-dirs=7 "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US"

但现在没有文件被下载。如何使用 wget(或其他命令行工具)下载文件,并让文件的标题与我在浏览器中访问该 URL 时的标题相同?

答案1

在这种情况下,您希望信任标头中发送的服务器名称,如果没有该指令,wget将使用 URL 中的文件名...

wget "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US" --trust-server-names

当然,为了使其工作,所有服务器都需要发送正在发送/生成的任何文件的文件名。有些脚本不会这样做 - 如果是这种情况,您仍然会得到实际上是该文件的“index.html”。

在这种情况下,您要做的就是使用-O输出选项,并在最后指定所需的文件名

wget "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US" -O latest-firefox.tar.bz2

当然,您需要知道它是什么文件类型等,才能使这部分工作。

答案2

您可以安装克利杰特的插件firefox。按下链接后,它将curl在 下生成一个命令Download with cURL。在这种情况下,它会是这样的:

curl --header 'Host: ftp.mozilla.org' --header 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0' --header 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' --header 'Accept-Language: en,de;q=0.5' --header 'Cookie: optimizelyEndUserId=oeu1495381484085r0.16482844406273445; optimizelySegments=%7B%22245984388%22%3A%22false%22%2C%22246002457%22%3A%22search%22%2C%22246073289%22%3A%22none%22%2C%22246073290%22%3A%22ff%22%7D; optimizelyBuckets=%7B%7D' --header 'DNT: 1' --header 'Connection: keep-alive' --header 'Upgrade-Insecure-Requests: 1' 'https://ftp.mozilla.org/pub/firefox/releases/56.0.1/linux-x86_64/en-US/firefox-56.0.1.tar.bz2' -o 'firefox-56.0.1.tar.bz2' -L

答案3

简单地与curl工具:

curl -Os "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US/firefox-56.0.1.tar.bz2" 

-O,--remote-name
将输出写入本地文件,其名称类似于我们获得的远程文件。 (仅使用远程文件的文件部分,路径被切断。)

相关内容