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

正しいファイル名にリダイレクト: "Firefox-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

その後、ファイル名を抽出できます。

おすすめ記事