cURL을 사용하여 GitHub에서 tarball을 다운로드하려면 어떻게해야합니까?


93

cURL을 사용하여 GitHub에서 tarball을 다운로드하려고하는데 리디렉션되지 않는 것 같습니다.

$ curl --insecure https://github.com/pinard/Pymacs/tarball/v0.24-beta2
<html><body>You are being <a href="https://nodeload.github.com/pinard/Pymacs/tarball/v0.24-beta2">redirected</a>.</body></html>

참고 : wget이 나를 위해 작동합니다.

$ wget --no-check-certificate https://github.com/pinard/Pymacs/tarball/v0.24-beta2

그러나 궁극적으로 다음과 같은 인라인으로 압축을 풀고 싶기 때문에 cURL을 사용하고 싶습니다.

$ curl --insecure https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx

리디렉션 후 URL이 https://download.github.com/pinard-Pymacs-v0.24-beta1-0-gcebc80b.tar.gz 로 밝혀 졌지만 cURL이 충분히 똑똑해 지기를 바랍니다 . 이 밖으로.

답변:


148

-L옵션을 사용하여 리디렉션을 따르십시오.

curl -L https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx

3
를 들어 https, 당신은 가능성 필요는거야 -k.
nicerobot 2011

1
최근에 raw.github.com에 인증서 문제가있는 이유는 무엇입니까? 새 컴퓨터에 homebrew와 rvm을 설치하는 데 문제가있었습니다. 저는 홈페이지에서 복사해서 붙여 넣기를해서 일하고있었습니다. 이제 인증서 문제가 발생합니다. ruby ​​-e "$ (curl -fsSL raw.github.com/mxcl/homebrew/go)"curl : (60) SSL 인증서 문제 : 로컬 발급자 인증서를 가져올 수 없습니다 . 자세한 내용은 다음을 참조하세요. curl. haxx.se/docs/sslcerts.html curl은 기본적으로 "번들"을 사용하여 SSL 인증서 확인을 수행합니다. 인증서에 대한 curl의 확인을 끄려면 -k (또는 --insecure) 옵션을 사용하십시오.
Chris Cinelli 2013 년

음 ... 타르볼에 하위 모듈도 포함시킬 가능성이 있습니까? 서브 모듈의 경우 타르볼에 빈 디렉토리 만 생성되는 것 같습니다.
aurora

이것이 현재 일시적인 문제인지 확실하지 않지만 github는 현재 500 내부 서버 오류를 반환합니다.
BT

15
그리고 잠재적으로 누군가 Google을 저장 -L하려면 리디렉션을 따르십시오.
Steve Kehlet 2014 년

45

이를 수행하는 현대화 된 방법은 다음과 같습니다.

curl -sL https://github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz | tar xz

교체 user-or-org, repo그리고 sha1-or-ref그에 따라.

tarball 대신 zip 파일을 원하면 접미사 .zip대신 지정하십시오 .tar.gz.

-u token:x-oauth-basiccurl 옵션을 지정하여 개인 저장소의 아카이브를 검색 할 수도 있습니다 . 교체 token개인 액세스 토큰.


3
모든 답변 중 이것이 바로 제가 찾던 것입니다! oauth 토큰이있는 경우 직접 사용할 수 있습니다. https://token@github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz
svenevs

아카이브 대신 릴리스에서 다운로드 할 때 어떻게 작동합니까?
waspinator

1
@waspinator, 저는 여기curl -OL https://github.com/user-or-org/repo/releases/download/version/<asset name>.tar.gz 예제보기
Wayne

이것이 허용되는 답변보다 더 나은 방법을 설명 할 수 있습니까?
Robin Métral

14

wget을 사용하여»인라인까지«할 수도 있습니다. stdout을 출력 파일 ( -O -) 로 지정하기 만하면됩니다 .

wget --no-check-certificate https://github.com/pinard/Pymacs/tarball/v0.24-beta2 -O - | tar xz

2

다른 모든 솔루션은 분명히 자동화를 중단하는 릴리스 / 버전 번호를 지정해야합니다.

이 솔루션은 현재 테스트되고 Github API v3 에서 작동하는 것으로 알려져 있지만 태그 또는 릴리스 번호를 지정하지 않고 프로그래밍 방식으로 최신 릴리스 를 가져 오고 switch에서 지정한 임의의 이름으로 바이너리를 un-TAR 할 수 있습니다 --one-top-level="pi-ap". 아래 예제에서 사용자 f1linux 와 repo pi-ap 을 자신의 세부 정보와 Bob의 삼촌으로 바꾸 십시오.

curl -L https://api.github.com/repos/f1linux/pi-ap/tarball | tar xzvf - --one-top-level="pi-ap" --strip-components 1

이것은 아름답지만 실제로 설명을 사용할 수 있습니다. 예를 들어 어떤 GitHub API 버전이 있으며 어디에 문서화되어 있습니까?
l3l_aze

1
@ l3l_aze 방금 내 솔루션이 테스트되고 작동하는 것으로 알려진 현재 Githib API 버전 번호가 포함 된 답변을 편집했습니다. 피드백 주셔서 감사합니다!-T
F1Linux

우와. 나는 이것이 당신이 이미 공유 한 것보다 더 나아질 것이라고 생각하지 않았습니다. 대단히 감사합니다!
l3l_aze

1

특정 dir

cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx


더 나은 방법 cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx; cd -
zhengquan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.