표적

표적

표적

및 가 포함 .owner.login된 (Github REST API의 매개변수)라는 이름의 하위 디렉터리 에 저장소를 복제합니다 jq.git clonexargs


머리말

, jq및 를 사용하여 저장소를 복제할 수 있는 코드가 어딘가에 있습니다 . 그러나 각 저장소에 대해 새 상위 디렉토리를 생성하도록 설정할 수는 없습니다. (저는 Windows 사용자이지만 이 bash 스크립트 외에 달성하려는 다른 솔루션에 대해 쿼리할 수 없습니다. GNU 명령이 어떻게 상호 작용하는지 전혀 모르고 이것이 제가 지식을 모을 수 있는 최대치입니다. )git clonexargs

원본 코드

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.xargsjq

답변1

특정 문제를 재현하기 위해 특정 Github 사용자를 제공하지 않았기 때문에 개인적으로 알고 있는 다른 Github 계정을 사용하여 테스트했습니다.

귀하의 시도에는 두 가지 주요 문제가 있습니다.

  1. xargs이상적으로는 읽은 각 주장을 인용해야 합니다.
  2. 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 | @shas 표현식을 사용하여 단일 쉘 인용 문자열이 포함된 행 스트림을 얻을 수도 있습니다. 어떻게 사용하는지는 중요하지 않습니다 jq.xargs

이 단어 스트림이 주어지면 git clonevia를 호출합니다 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

관련 정보