Skip to content

Instantly share code, notes, and snippets.

@diegopaludo
Created June 10, 2019 18:33
Show Gist options
  • Save diegopaludo/c6f34b76b730a72678d9f8e8944086f6 to your computer and use it in GitHub Desktop.
Save diegopaludo/c6f34b76b730a72678d9f8e8944086f6 to your computer and use it in GitHub Desktop.
Bash script to clone Gitlab repositories and create Gitlab-based directory structure
#!/bin/bash
REGEX_GROUPS=${1}
GITLAB_API=https://gitlab.com/api/v4
GITLAB_API_OPT="$GITLAB_API/projects?order_by=name&membership=true&per_page=100"
PRIVATE_TOKEN=$(cat ${HOME}/.gitlab-token)
TOTAL_PAGES=$(curl -skI -H "Private-Token: $PRIVATE_TOKEN" "$GITLAB_API_OPT" | awk -F ":" '/X-Total-Pages: /{sub("\r","") ; print $2}')
for pages in $(seq 1 "$TOTAL_PAGES"); do
GROUPS_INFO_PAGES=$(curl -sk -H "Private-Token: $PRIVATE_TOKEN" "$GITLAB_API_OPT&page=$pages")
GROUPS_INFO=$GROUPS_INFO$GROUPS_INFO_PAGES
done
REGEX_GROUPS=".[] | select(.path_with_namespace|test(\"$REGEX_GROUPS\")) | .path_with_namespace"
echo "Found:"
echo "$GROUPS_INFO" | jq "$REGEX_GROUPS"
echo "$GROUPS_INFO" | jq "$REGEX_GROUPS" | xargs -L1 -I'{}' mkdir -p {}
echo "$GROUPS_INFO" | jq "$REGEX_GROUPS" | xargs -L1 -I'{}' git clone [email protected]:{}.git {}
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment