2017-01-24 3 views
0

우리 조직의 모든 github에있는 모든 개인 저장소의 목록을 얻고 싶습니다. 나는 시도 - 나는 per_page MAX 값이 100 알아낼우리의 모든 비공개 repos의 목록을 얻으십시오

curl -u user:pw -X GET https://api.github.com/orgs/xxx/repos?per_page=100 >> list.txt 

, 어떻게 하나 개의 파일에 모든 우리의 repos를받을 수 있나요?

감사

답변

1

도달 한 마지막 페이지가 비어있을 때까지 각 페이지를 반복하는 bash 스크립트를 사용할 수 있습니다.

필터는 개인 저장소를 필터링하는 jq JSON 구문 분석기로 수행 할 수 있으며, 원하는 경우 분기 된 저장소 나 원하는 항목을 제외 할 수도 있습니다. 내가 인증을 위해 personal access token을 사용하고

주 (개인의 repo를 얻을 수) :

#!/bin/bash 

# change those vars : 
GITHUB_ORG=docker 
GITHUB_ACCESS_TOKEN=12345666799897950400303332323 
OUTPUT_FILE=repo_list.json 

loop=0 
index=1 
TMP_FILE=tmpfile.txt 
PER_PAGE=100 

rm -f $TMP_FILE 
echo "[]" > $OUTPUT_FILE 

while [ "$loop" -ne 1 ] 
do 

    data=`curl -s "https://api.github.com/orgs/$GITHUB_ORG/repos?access_token=$GITHUB_ACCESS_TOKEN&page=$index&per_page=$PER_PAGE"` 

    check_error=`echo "$data" | jq 'type!="array"'` 

    if [ "$check_error" == "true" ]; then 
     echo "access token is invalid" 
    exit 1 
    fi 

    filtered=`echo "$data" | jq '[ .[] | select(.private == true) ]'` 

    if [ "$filtered" == "[]" ]; then 
     loop=1 
    else 
     echo "$filtered" > $TMP_FILE 
     concat=`jq -s add $TMP_FILE $OUTPUT_FILE` 
     echo "$concat" > $OUTPUT_FILE 
     size=`jq '. | length' $OUTPUT_FILE` 
     echo "computed $index page - fetched total repo size of : $size" 
     index=$((index+1)) 
    fi 
done 

을 대신 전체 JSON 객체의 저장소 URL의 배열을 가지고 싶다면, 대체 :

jq '[ .[] | select(.private == true) ]' 

과 :

jq '[ .[] | select(.private == true) | .html_url ]'