カールなどを使って情報を抽出する

カールなどを使って情報を抽出する

自動化された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と異なる場合にのみダウンロードできます。

関連情報