很多网站重定向 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
然后您可以从中提取文件名。