カールやwgetを使ってダウンロードURLを自動的に取得できますか?

カールやwgetを使ってダウンロードURLを自動的に取得できますか?

私は通常SlackBuildsを使ってSlackware用のパッケージをビルドします。 wgetを使用してソースコードをダウンロードし、変数を使用します。

このリンクを使用すると、バージョンが変わっても問題はありませんが、17.0.1から17.0.1に変更すると自動的にダウンロードされ、ビルド...などになります。

VERSION=16.0.1
https://download.java.net/java/GA/jdk${VERSION}/GPL/openjdk-${VERSION}_linux-x64_bin.tar.gz

問題は、URLにランダムな数字が表示されると、これらのランダムな数字がバージョンごとに変更されることです。この例では、7147401fd7354114ac51ef3e1328291fと9

VERSION=16.0.1
https://download.java.net/java/GA/jdk${VERSION}/7147401fd7354114ac51ef3e1328291f/9/GPL/openjdk-${VERSION}_linux-x64_bin.tar.gz

変数置換を使用することはできますが、やや不便ですね。変更時に新しい「ランダム」番号を取得するためのよりエレガントな方法を知っている人はいますか? wgetまたはカールを使用してください。

ベストアンサー1

2秒使用できますwget

  1. wgetダウンロードできるファイルのリストを含むWebサイトのHTMLページ。次に、それぞれのhref=...
  2. href探しているものと一致するパターンをフィルタリングします。これは次のようになります。
https://download.java.net/java/GA/jdk(*)/*/[0-9]/GPL/openjdk-(*)_linux-x64_bin.tar.gz
  1. キャプチャグループを使用して([0-9]+\.[0-9]+)各URLからバージョンを抽出します(例:)。

  2. ダウンロードしたいバージョンを選択してください。これは、最も高いバージョンでも、変数と一致するバージョンでもかまいません。${VERSION}

  3. wgetそのウェブサイト


これは以下に関連しています。uscanDebian で使用するツール。 uscan呼び出されたファイルは上記のタスクを実行するために使用されますが、通常はパッケージdebian/watchの最新バージョンを識別したり(開発者にパッケージのいずれかに利用可能なアップデートがあることを知らせたり)、開発用にすぐにダウンロードします。従業員はこれを Debian にインポートできます。

uscanDebianに表示されるパッケージ名と一致するようにダウンロードしたアーカイブの名前を変更するなど、ここでは終了しません。これは他の既存の隣接ファイルによって異なるため、すぐには機能しない可能性がuscanあります。少なくとも、インデックスのダウンロード、hrefの解析、最適なインデックスの選択、およびwget-ingが非常にうまく機能するように設計されていることを示しています。 uscan複雑すぎないPerlスクリプト(〜4000 sloc、消去できる多くの項目をサポート)なので、ニーズに合わせて調整できます。

おすすめ記事