#!/bin/bash # time stamp printf "\nMultiple backups started at:\n " date # # log the shell used # echo "Shell used: $0" # base setup SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) # debugging echo "debugging SCRIPT_PATH=${SCRIPT_PATH}" echo "debugging SCRIPT_DIR=${SCRIPT_DIR}" # save old CONFIGURATION for later reset export SAVE_CONFIGURATION=${CONFIGURATION} # debugging printf "debugging SAVE_CONFIGURATION=%s\n" ${SAVE_CONFIGURATION} # export all variables in "../.env" set -a source ${SCRIPT_DIR}/../.env set +a # check BACKUP_CONFIGURATIONS if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then #%! echo "You must provide a BACKUP_CONFIGURATIONS via environment variable" printf "!!! You must provide a BACKUP_CONFIGURATIONS via environment variable !!!\n" exit 1 else # debugging printf "debugging BACKUP_CONFIGURATIONS=%s\n" ${BACKUP_CONFIGURATIONS} # convert configurations to array IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "${BACKUP_CONFIGURATIONS}" # display the clusters printf "Backup the clusters:\n" for i in "${CONFIGURATIONS_ARRAY[@]}" do echo " ${i}" done fi # check BACKUP_SAVED_BACKUPS_NUMBER if [[ -z ${BACKUP_SAVED_BACKUPS_NUMBER} ]]; then #%! echo "You must provide a BACKUP_SAVED_BACKUPS_NUMBER via environment variable" printf "!!! You must provide a BACKUP_SAVED_BACKUPS_NUMBER via environment variable !!!\n" exit 1 else # deleting backups? if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then printf "Keep the last %d backups for all networks.\n" ${BACKUP_SAVED_BACKUPS_NUMBER} else echo "!!! ATTENTION: No backups are deleted !!!" fi fi echo "Cancel by ^C. You have 15 seconds" # wait for the admin to react sleep 15 printf "\n" for i in "${CONFIGURATIONS_ARRAY[@]}" do export CONFIGURATION=${i} # individual cluster backup ${SCRIPT_DIR}/cluster.backup.sh # deleting backups? if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then # delete all oldest backups, but leave the last BACKUP_SAVED_BACKUPS_NUMBER keep=${BACKUP_SAVED_BACKUPS_NUMBER} path="${SCRIPT_DIR}/../configurations/${CONFIGURATION}/backup/" cd $path printf "In\n '$path'\n remove:\n" # TODO: replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory while [ `ls -1 | wc -l` -gt $keep ]; do oldest=`ls -c1 | head -1` echo " ${oldest}" rm -rf $oldest done printf "Keep the last %d backups:\n " ${BACKUP_SAVED_BACKUPS_NUMBER} ls cd ${SCRIPT_DIR} else echo "!!! ATTENTION: No backups are deleted !!!" fi printf "\n" done # reset CONFIGURATION to old # TODO: clearily if this is the same as: $ export CONFIGURATION=${SAVE_CONFIGURATION}" export CONFIGURATION=${SAVE_CONFIGURATION} echo "Reset to CONFIGURATION=${CONFIGURATION}" # debugging printf "debugging CONFIGURATION=%s\n" ${CONFIGURATION}