GitHub 저장소에서 특정 파일을 일괄 다운로드합니다.

GitHub 저장소에서 특정 파일을 일괄 다운로드합니다.

*.tar.gz모두 일괄/순차 다운로드가 가능한가요?GitHub 저장소? 모든 것을 다운로드하는 데 사용할 수 있는 특정 명령이 있습니까? 아니면 모든 것을 수동으로 다운로드하는 대신 스크립트를 만들어야 합니까? 저는 리눅스를 사용하고 있습니다.

답변1

먼저 단순히 저장소 복제를 고려해야 합니다 git. 그러면 버전 간 비교가 더 쉬워집니다. 이는 이 Q&A의 범위를 벗어납니다.

저는 웹 기반 접근 방식과 API를 사용하는 GitHub 전용 접근 방식이라는 두 가지 접근 방식을 제안합니다.

웹 스크래핑

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하고 종료 시점을 감지하는 루프가 필요합니다 .

관련 정보