GitHubリポジトリから特定のファイルを一括ダウンロードします。

GitHubリポジトリから特定のファイルを一括ダウンロードします。

*.tar.gzすべて一括/順次ダウンロードは可能ですか?GitHubリポジトリ?すべてをダウンロードするために使用できる特定のコマンドはありますか?それとも、すべてを手動でダウンロードする代わりにスクリプトを作成する必要がありますか?私はLinuxを使用しています。

答え1

まず、単にストレージの複製を検討する必要がありますgit。これにより、バージョン間の比較が容易になります。これはこのQ&Aの範囲外です。

私は、WebベースのアプローチとAPIを使用するGitHub専用のアプローチという2つのアプローチを提案します。

Webスクレイピング

w3mこれは、awkおよびが必要な迅速で汚れた一行スクリプトです(読みやすくするためにここでは複数行に分割)。この一時スクリプトは、自動化されたタスクでの使用には適していない可能性があります。xargscurl

  • w3m最後にすべてのリンクを含むページコンテンツをフォーマットするために使用されます。
  • awk/releases/download/.tar.gz文字列を含み、URLで終わるリンクのみを抽出します。
  • xargs出力をコマンドライン引数に変換して提供
  • curlダウンロードしてください。以下を追加すると、-P nn個の並列ダウンロードにも適していますxargs

w3m -o display_link_number=1 -dump https://github.com/GloriousEggroll/proton-ge-custom/releases | 
    awk '$1 ~ /\[[0-9]+\]/ && $2 ~ /\/releases\/download\/.*\.tar\.gz$/ { print $2 }' | 
    xargs -n 1 curl -JRLO 

echo実際にダウンロードが発生しないように以前に挿入した場合、curl出力は次のようになります。

curl -JRLO https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.10-GE-1/Proton-6.10-GE-1.tar.gz
curl -JRLO https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.9-GE-2-github-actions-test/Proton-6.9-GE-2-github-actions-test.tar.gz
curl -JRLO https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.9-GE-2/Proton-6.9-GE-2.tar.gz
curl -JRLO https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.9-GE-1/Proton-6.9-GE-1.tar.gz
curl -JRLO https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.8-GE-2/Proton-6.8-GE-2.tar.gz
curl -JRLO https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.8-GE-1/Proton-6.8-GE-1.tar.gz

注:この-o display_link_number=1オプションは実際には文書化されていませんが、例として表示されます。w3mマニュアルページ

これは最初のページのコンテンツに制限されているため、すべてのダウンロードが可能ではありません。次のページリンクはコンテンツ(特にページに表示される最後のバージョン)を知る必要があるため、これを処理するのは複雑すぎます。

使用するのに最適です...

GitHub REST API

一つあるリリース関連のGitHub APIジョブに資格情報が必要ないように見え、結果をスクリプトに適したJSON形式で出力します。jq(通常配布パッケージで提供されます。) これにはcurl、、が必要ですxargs。名前で終わる各アセットのダウンロードURLが表示されます。 (まず初期値を確認してください。jqjq.tar.gzカールダンプを| jq .使用すると、便利な部品を見つけることができます。)

curl -H 'Accept: application/vnd.github.v3+json' 'https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases' | 
    jq -r '
        .[].assets[] | if .name | endswith(".tar.gz") then
            .browser_download_url
        else
            empty
        end' | 
    xargs -n 1 curl -JRLO

echo最後の方法の前に挿入すると、curl〜6の代わりに30があることを除いて、最初の方法と同じ出力が提供されます。

〜のようにAPIで説明されているようにページあたりデフォルトは30です。?per_page=XX最大100件の結果を表示するには、URLに追加してください。大きい方には追加のパラメータが含まれ、&page=Y終了時点を検出するループが必要です。

関連情報