Skip to content

Instantly share code, notes, and snippets.

@vke-code
Created September 12, 2018 21:39
  • Star 17 You must be signed in to star a gist
  • Fork 20 You must be signed in to fork a gist
Star You must be signed in to star a gist
Embed
What would you like to do?
#!/bin/bash
# Clone all github.com repositories for a specified user.
if [ $# -eq 0 ]
then
echo "Usage: $0 <user_name> "
exit;
fi
USER=$1
# clone all repositories for user specifed
for repo in `curl -s https://api.github.com/users/$USER/repos?per_page=1000 |grep git_url |awk '{print $2}'| sed 's/"\(.*\)",/\1/'`;do
git clone $repo;
done;
@vke-code
Copy link
Author

vke-code commented May 6, 2021

@davidvandenbor

Thanks for trying out my gist. You need to additionally specify the username whose repos you'd like to download.

e.g. to download all of your repos:
sh /path/to/download-all-repos.sh davidvandenbor

@davidvandenbor
Copy link

davidvandenbor commented May 6, 2021

Hi vke-code!

IT WORKED!!
Now I know what the problem was, I misunderstood the error message in your sh file and interpreted it as:

type the username inside the bash script (replace <user_name> inside de sh code with github username)

Modification

I modified your sh file to make it a bit more clearer for future users who aren't as familiar with bash scripts. I also modified the error notification that appears if you don't type the Github username:

#!/bin/bash

# This BASH script clones all github.com repositories for a specified user!
# HOW TO USE THE SCRIPT: 
# CD to the directory where you want to download all the repositories (or open terminal there)
# then execute the script by defining the path to where you saved the .sh file, followed by your Github username:
# "sh the/path/to/download-all-repos.sh <github_user_name_here>"
# Then hit RETURN and watch the magic happen

if [ $# -eq 0 ]
  then
    echo "ERROR: Github username is missing, you shoud type THIS in your terminal: "
    echo "$0 <github_user_name_here> "
    exit;
fi

USER=$1

# clone all repositories for specified user:
for repo in `curl -s https://api.github.com/users/$USER/repos?per_page=1000 |grep git_url |awk '{print $2}'| sed 's/"\(.*\)",/\1/'`;do
git clone $repo;
done;

@dhruvparekh12
Copy link

dhruvparekh12 commented Aug 5, 2021

?per_page=1000 seems to have been limited to 99 repos only by the github API. Alternatively, we can substitute the query_param with ?page=1. This is will return 30 repos on a page by page basis. Changing ?page=2,?page=3 and so on we can get repos beyond the limit of 99.

Here's what I simply did to get the remaining repos beyond 99.

#!/bin/bash

# Clone all github.com repositories for a specified user.

if [ $# -eq 0 ]
  then
    echo "Usage: $0 <user_name> "
    exit;
fi

USER=$1

# clone all repositories for user specified
for repo in `curl -s https://api.github.com/users/$USER/repos?page=4 |grep git_url |awk '{print $2}'| sed 's/"\(.*\)",/\1/'`;do
git clone $repo;
done;

# clone all repositories for user specified
for repo in `curl -s https://api.github.com/users/$USER/repos?page=5 |grep git_url |awk '{print $2}'| sed 's/"\(.*\)",/\1/'`;do
git clone $repo;
done;

for repo in `curl -s https://api.github.com/users/$USER/repos?page=6 |grep git_url |awk '{print $2}'| sed 's/"\(.*\)",/\1/'`;do
git clone $repo;
done;

@Pierre-Mike
Copy link

Thanks :)

@andjohn
Copy link

andjohn commented Jan 6, 2023

its needs to replace git_url to clone_url

#!/bin/bash

# This BASH script clones all github.com repositories for a specified user!
# HOW TO USE THE SCRIPT: 
# CD to the directory where you want to download all the repositories (or open terminal there)
# then execute the script by defining the path to where you saved the .sh file, followed by your Github username:
# "sh the/path/to/download-all-repos.sh <github_user_name_here>"
# Then hit RETURN and watch the magic happen

if [ $# -eq 0 ]
  then
    echo "ERROR: Github username is missing, you shoud type THIS in your terminal: "
    echo "$0 <github_user_name_here> "
    exit;
fi

USER=$1

# clone all repositories for specified user:
for repo in `curl -s https://api.github.com/users/$USER/repos?per_page=1000 |grep clone_url |awk '{print $2}'| sed 's/"\(.*\)",/\1/'`;do
git clone $repo;
done;

@ioritz1993
Copy link

ioritz1993 commented Jul 22, 2023

Thanks a lot ! I have added a new functionality.

The added functionality allows for two different actions, depending on the state of the repository.

  1. Cloning non-existent repositories
  2. Pulling existing repositories

The code with the changes is here:
https://gist.github.com/ioritz1993/be12fd85fb3fd7a502d01597e8a9bd62

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment