-
-
Save erdincay/4f1d2e092c50e78ae1ffa39d13fa404e to your computer and use it in GitHub Desktop.
#!/bin/bash | |
if [ -z "$1" ]; then | |
echo "waiting for the following arguments: username + max-page-number" | |
exit 1 | |
else | |
name=$1 | |
fi | |
if [ -z "$2" ]; then | |
max=2 | |
else | |
max=$2 | |
fi | |
cntx="users" | |
page=1 | |
echo $name | |
echo $max | |
echo $cntx | |
echo $page | |
until (( $page -lt $max )) | |
do | |
curl "https://api.github.com/$cntx/$name/repos?page=$page&per_page=100" | grep -e 'clone_url*' | cut -d \" -f 4 | xargs -L1 git clone | |
$page=$page+1 | |
done | |
exit 0 |
how to make it work with private repos?
how to make it work with private repos?
You can tack on an env var with your github token to the URL: &access_token=$GITHUB_TOKEN
How to run this on Windows10?
btw i want to clone some private repos too
How to run this on Windows10?
btw i want to clone some private repos too
please have a look at the security aspects on the comments here: https://stackoverflow.com/questions/19576742/how-to-clone-all-repos-at-once-from-github/32833411#32833411
Should line 11 have a $ before the 2 to make it a variable?
nope, will run only for the first page (first 100 entries) if used without max-page argument
Thank you!
Only thing that tripped me up was that my terminal is authenticated with ssh
, so I needed to switch clone_url
for ssh_url
. And also I got a syntax error on until (( $page -lt $max )
and $page=$page+1
, I had to change them to until [ $page -gt $max ]
and let "page=page+1"
. And, finally, I was cloneing the repos in my org, not my user, so I set cntx=orgs
Whole script being
#!/bin/zsh
if [ -z "$1" ]; then
echo "waiting for the following arguments: username + max-page-number"
exit 1
else
name=$1
fi
if [ -z "$2" ]; then
max=2
else
max=$2
fi
cntx="orgs"
page=1
echo $name
echo $max
echo $cntx
echo $page
until [ $page -gt $max ]
do
curl -i -u $name:$NPM_TOKEN "https://api.github.com/$cntx/$name/repos?page=$page&per_page=100" | grep -e 'ssh_url*' | cut -d \" -f 4 | xargs -L1 git clone
let "page=page+1"
done
exit 0
I did a similar thing with gh
command.
You can see it there.
"This is another solution":
page=$((page+1))
No Problem, happy to help!