Take backup of your BitBucket repositories using Shell script
#!/bin/bash #usage() { echo "Usage: $0 -k <app key> -u <app user> -w <workspace> [-t <target directory>] [-p <project>]" 1>&2; exit 1; } TARGET_DIR="." APP_USER='itadmin-poopcode' APP_KEY='5b5afa9jBuXqPwpNf54d' WORKSPACE='PoopcodeWorkspace' apt-get install jq -y apt-get install zip -y if [ -z "${TARGET_DIR}" ] || [ -z "${APP_KEY}" ] || [ -z "${APP_USER}" ] || [ -z "${WORKSPACE}" ]; then usage fi rm -rf "codebase" rm -rf "codebase.zip" mkdir codebase cd "codebase" || exit BASE_URL="https://api.bitbucket.org/2.0/repositories/${WORKSPACE}" NEXT_URL=${BASE_URL} AUTH="Authorization: Basic $(echo -n "${APP_USER}:${APP_KEY}" | base64)" while : ; do printf "get repositories from %s ...\n" "${NEXT_URL}" REPOSITORIES=$(curl --silent --location --request GET "${NEXT_URL}" --header "${AUTH}") NEXT_URL=$(echo "${REPOSITORIES}" | jq -r ".next") readarray -t VALUES < <(echo "${REPOSITORIES}" | jq -c '.values[]') for item in "${VALUES[@]}"; do REPO_NAME=$(jq -r '.name' <<< "$item") REPO_PROJECT=$(jq -r '.project.name' <<< "$item") if [ -z "${PROJECT}" ] || [ "${REPO_PROJECT}" == "${PROJECT}" ] ; then REPO_URL=$(jq -r '.links.clone[0].href' <<< "$item") #REPO_URL="$(REPO_URL//@/:$APP_KEY@/)" #REPO_URL=$(echo "$REPO_URL" | tr '@' ':"$APP_KEY"@') #REPO_URL = $(sed "s/@/:$APP_KEY@/" <<< "$REPO_URL") #REPO_URL=$(tr '@' ':$APP_KEY@' <<<"$REPO_URL") REPO_URL=$(echo $REPO_URL | sed -e "s/@/:$APP_KEY@/g") printf "Getting repo URL" printf "${REPO_URL}" REPO_DIR=$(echo "${REPO_URL}" | sed 's%^.*/\([^/]*\)\.git$%\1%g') if [ ! -d "${REPO_DIR}" ]; then printf "clone %s/%s ...\n" "${REPO_PROJECT}" "${REPO_NAME}" printf "${REPO_URL}" git clone --mirror "${REPO_URL}" cd "${REPO_DIR}".git git bundle create ../${REPO_DIR}.bundle --all cd .. rm -rf "${REPO_DIR}".git else printf "remote update %s/%s\n" "${REPO_PROJECT}" "${REPO_NAME}" cd "${REPO_DIR}" || return git remote update cd .. fi else printf "skip %s/%s\n" "${REPO_PROJECT}" "${REPO_NAME}" fi done break [[ ${NEXT_URL} != "null" ]] || break done FILE_NAME="code_base" ZIP_FILE_NAME=$FILE_NAME.'echo $(date "+%Y.%m.%d-%H.%M.%S")' cd ".." printf "Deleting node_modules folder" find -type d -name 'node_modules*' -exec rm -rv {} + printf "Zipping code" #zip -r codebase.zip "codebase" tar -zcvf codebase.tar.gz codebase/ ls -a printf "Zip done."