Linux
從 GitHub 儲存庫批量下載某些文件
*.tar.gz
是否可以從GitHub 儲存庫批量/順序下載所有內容?除了手動下載所有內容之外,是否可以使用某個命令來執行此操作,或者我是否必須創建一個腳本?我正在使用 Linux。
您應該首先考慮使用 簡單地複製儲存庫
git
,然後更容易在版本之間進行比較。這超出了本 Q/A 的範圍。我提出了兩種方法:一種基於 Web 的方法,以及一種使用 API 的 GitHub 特定方法:
網頁抓取
這是一個快速的髒單行腳本(為了便於閱讀,這里分成多行),需要
w3m
,和. 這個臨時腳本可能不打算在任何自動化的東西中使用。awk``xargs``curl
- 用於
w3m
格式化頁面內容,最後包含所有連結,awk
僅提取包含字元串/releases/download/
並以 URL 結尾的連結.tar.gz
,xargs
將輸出轉換為命令行參數以提供給curl
下載它們。通過添加以下內容,它甚至適用於 n 次並行-P n
下載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
,jq
.jq
將顯示以 . 結尾的每個資產名稱的下載 URL.tar.gz
。(首先檢查初始curl轉儲,| 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
將提供與第一種方法相同的輸出,除了將有 30 個而不是 6 個。如API 中所述,per_page預設為 30。添加到 URL
?per_page=XX
最多可以得到 100 個結果。任何更大的東西都需要一個帶有附加參數的循環&page=Y
並檢測它何時結束。