自動化されたVirtualBoxビルド用のスクリプトを作成する予定で、VirtualBoxの各バージョンにバージョン(もちろん)とリリースバージョンが含まれていることを確認しました。
この例では
http://download.virtualbox.org/virtualbox/5.0.6/VirtualBox-5.0.6-103037-Linux_amd64.run
5.0.6はバージョンで、103037はリリースバージョンで、おそらくgitのリビジョンです。
もちろん、すべての新しいバージョンには新しいリリースバージョンがあります。リリースバージョンを知らないか、カールなどを使って抽出できますか?
答え1
これは非常にきれいですが、lynx
リンクダンプに依存します(正規表現などを使用してソースHTMLを解析する代わりに)。
wget -q "https://www.virtualbox.org/wiki/Linux_Downloads" -O - | lynx -stdin -dump -listonly | grep -Eo 'http.+amd64.run$'
最後のgrep
正規表現では、amd64バージョンが欲しいと仮定します。
同じことcurl
:
curl -s "https://www.virtualbox.org/wiki/Linux_Downloads" | lynx -stdin -dump -listonly | grep -Eo 'http.+amd64.run$'
wget
アップデート:電話をかけたり不要になったことが正しく指摘されました。curl
lynx -dump -listonly "https://www.virtualbox.org/wiki/Linux_Downloads" | grep -Eo 'http.+amd64.run$'
答え2
wgetだけを使用すると、リリースバージョンは必要なく、バージョンのみを使用できます。
wget -e robots=off -nd -r --no-parent -A 'VirtualBox-5.0.6-*-Linux_amd64.run' http://download.virtualbox.org/virtualbox/5.0.6/
wget は、許可パターンの一部として再帰モードでグローバルマッチングをサポートするため、次のようになります。
-r
: 再帰ダウンロード
--no-parent
: 再帰しない..
-A 'VirtualBox-5.0.6-*-Linux_amd64.run'
: glob の承認モードを使用
-e robots=off
: robots.txt をダウンロードしない
-nd
: ローカルでサブディレクトリを作成しない
もちろん、バージョン環境変数を使用できます。
VER=5.0.6
wget -e robots=off -nd -r --no-parent -A "VirtualBox-${VER}-*-Linux_amd64.run" http://download.virtualbox.org/virtualbox/${VER}/
VERは実際には以下から得ることができます。http://download.virtualbox.org/virtualbox/LATEST.TXTだからこれは次のようになります:
VER=$(wget -O - http://download.virtualbox.org/virtualbox/LATEST.TXT)
wget -e robots=off -nd -r --no-parent -A "VirtualBox-${VER}-*-Linux_amd64.run" http://download.virtualbox.org/virtualbox/${VER}/
または、カールまたはリンスを使用してバージョン情報を抽出します。
cronスクリプトで使用している場合、daily verはローカルバージョンenv var(wgetからNEWVER)と同じで、NEWVERが現在のVERと異なる場合にのみダウンロードできます。