표적
및 가 포함 .owner.login
된 (Github REST API의 매개변수)라는 이름의 하위 디렉터리 에 저장소를 복제합니다 jq
.git clone
xargs
머리말
, jq
및 를 사용하여 저장소를 복제할 수 있는 코드가 어딘가에 있습니다 . 그러나 각 저장소에 대해 새 상위 디렉토리를 생성하도록 설정할 수는 없습니다. (저는 Windows 사용자이지만 이 bash 스크립트 외에 달성하려는 다른 솔루션에 대해 쿼리할 수 없습니다. GNU 명령이 어떻게 상호 작용하는지 전혀 모르고 이것이 제가 지식을 모을 수 있는 최대치입니다. )git clone
xargs
원본 코드
UserName=CHANGEME; \
curl -s "https://api.github.com/users/$UserName/repos?per_page=1000" |\
jq -r '.[].html_url' |\
xargs -l git clone
내 수정 사항은 다음과 같습니다.
UserName=CHANGEME; \
curl -s "https://api.github.com/users/$UserName/repos?per_page=1000" |\
jq -r '.[] | .html_url, .full_name' |\
xargs -l git clone
원래 코드와 동일한 결과를 얻습니다. 다음 오류 로그도 있습니다.
fatal: repository 'repoauthor/reponame?' does not exist
나는 그것이 어디서 왔는지 모른다 \?
.
그래서 디버깅을 하려고 합니다
코드를 나누어서
UserName=CHANGEME; \
curl -s "https://api.github.com/users/$UserName/repos?per_page=1000" |\
jq -r '.[] | .html_url, .full_name'
다음을 반환합니다.
https://github.com/repo1name/repo1author
repo1name/repo1author
https://github.com/repo2name/repo2author
repo2name/repo2author
... etc
하나가 아닌 2개의 다른 줄로 반환됩니다 .html_url
..full_name
xargs
이것이 문제라고 생각했지만 혼자 달려 보았습니다 .
https://github.com/repoauthor/reponame |\
xargs -l git clone
그냥 git 도움말 파일로 이동합니다.
너무 길어요.
생성 된 문자열 을 jq
.xargs
jq
답변1
특정 문제를 재현하기 위해 특정 Github 사용자를 제공하지 않았기 때문에 개인적으로 알고 있는 다른 Github 계정을 사용하여 테스트했습니다.
귀하의 시도에는 두 가지 주요 문제가 있습니다.
xargs
이상적으로는 읽은 각 주장을 인용해야 합니다.xargs
이는git clone
저장소 URL과 이를 복제할 대상 디렉터리라는 두 개의 개별 매개변수를 사용하여 호출해야 합니다.
다음과 같이 매개변수에 대한 참조를 정리할 수 있습니다.
curl -s "https://api.github.com/users/$UserName/repos?per_page=1000" |
jq -r '.[] | [ .html_url, .full_name ] | @sh'
이는 요청에 대한 응답에서 필요한 정보를 curl
배열로 추출한 다음 @sh
연산자를 사용하여 각 배열을 쉘 인용 단어 라인으로 출력합니다.
엄밀히 말하면 .[] | .html_url, .full_name | @sh
as 표현식을 사용하여 단일 쉘 인용 문자열이 포함된 행 스트림을 얻을 수도 있습니다. 어떻게 사용하는지는 중요하지 않습니다 jq
.xargs
이 단어 스트림이 주어지면 git clone
via를 호출합니다 xargs
.
xargs -n 2 git clone
이 -n 2
메소드는 xargs
입력 스트림에서 한 번에 두 개의 인수를 사용하여 유틸리티를 호출합니다.
종합해보면:
curl -s "https://api.github.com/users/$UserName/repos?per_page=1000" |
jq -r '.[] | [ .html_url, .full_name ] | @sh' |
xargs -n 2 git clone