从 wget URL 获取文件名 --trust-server-names

从 wget URL 获取文件名 --trust-server-names

很多网站重定向 URL 来让您获得二进制文件的最新版本。

例如:

wget https://download.mozilla.org/?product=firefox-aurora-latest-l10n&os=linux64&lang=fr

让您下载最新的 Firefox 开发者版本。输出文件将为“firefox-50.0a2.fr.linux-x86_64.tar.bz2”。

wget https://download.mozilla.org/?product=firefox-aurora-latest-l10n&os=linux64&lang=fr -P $HOME

将导致输出文件名如下:“?product=firefox-aurora-latest-l10n&os=linux64&lang=fr”。

所以我会使用:

wget https://download.mozilla.org/?product=firefox-aurora-latest-l10n&os=linux64&lang=fr -P $HOME --trust-server-names

重定向到正确的文件名:“火狐-50.0a2.fr.linux-x86_64.tar.bz2"

但在下次更新时,文件名将有所不同。

我目前正在编写一个脚本,因此我需要下载具有正确文件名的文件。

我的问题是:

如何在 $var 中获取下载的文件名,以便接下来使用它来提取存档?

注意:我无法使用基本名称,因为该名称不在 URL 中。

注2:我使用是--trust-server-names因为--content-disposition是实验性的并且不可靠。

答案1

文件名可以在命令的 stderr 输出中看到,如下所示

Saving to: 'firefox-50.0a2.fr.linux-x86_64.tar.bz2'

因此您可以将 stderr 捕获到文件或管道并提取字符串

if wget ... 2>log
then filename=$(awk <log '/^Saving to:/{print substr($0,13,length($0)-14)}')
...

或者,如果您愿意,可以通过执行以下操作从重定向中获取文件名

wget -S --max-redirect=0 ...

这不会检索文件,但在 stderr 上将显示它的新位置:

Location: https://download-installer.cdn.mozilla.net/pub/firefox/nightly/latest-mozilla-aurora-l10n/firefox-50.0a2.fr.linux-x86_64.tar.bz2

然后您可以从中提取文件名。

相关内容