*.tar.gz
是否可以批量/顺序下载所有GitHub 仓库?是否可以使用特定命令来下载所有内容,或者我必须创建一个脚本,而不是手动下载所有内容?我正在使用Linux。
答案1
您应该首先考虑简单地使用 克隆存储库git
,然后更容易在版本之间进行比较。这超出了本问答的范围。
我提出两种方法:基于 Web 的方法和使用 API 的 GitHub 特定方法:
网页抓取
这是一个快速而肮脏的单行脚本(为了便于阅读,这里分为多行),需要w3m
、awk
和。这个临时脚本可能不适合在任何自动化操作中使用。xargs
curl
- 用于
w3m
格式化页面内容,所有链接都在末尾, awk
/releases/download/
仅提取包含字符串并以.tar.gz
URL结尾的链接,xargs
将输出转换为命令行参数以提供给curl
下载它们。通过添加-P n
以下内容,它甚至适合 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
。将显示名称以 结尾的每个资产的下载 URL 。 (首先检查初始jq
jq
.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
将给出与第一种方法相同的输出,只不过会有 30 个而不是 ~ 6 个。
作为API 中描述的,每页默认为 30。添加到 URL?per_page=XX
最多可以显示 100 个结果。任何更大的东西都需要一个带有附加参数的循环&page=Y
并检测它何时结束。