Sie können ein Bash-Skript verwenden, das über jede Seite springt, bis die letzte erreichte Seite leer ist.
Der Filter kann mit jq
JSON-Parser getan werden, um privates Repository zu filtern, Sie können auch gegabelte Repos oder alles, was Sie wollen, ausschließen.
Bitte beachte, dass ich eine personal access token für die Authentifizierung verwendet wird (privat Repo zu bekommen):
#!/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
Wenn nur ein Array von Repository-URL anstelle des gesamten JSON-Objekt haben wollen, ersetzen:
jq '[ .[] | select(.private == true) ]'
mit:
jq '[ .[] | select(.private == true) | .html_url ]'