diff --git a/v2b.sh b/v2b.sh index 3c9fbec..70ae3cc 100755 --- a/v2b.sh +++ b/v2b.sh @@ -1,51 +1,22 @@ #!/bin/bash -#set -o xtrace +set -o xtrace set -u set -o pipefail UMASK="$(umask)" -final-local () { - if [[ -z "$(ls -A ${TEMPF})" ]]; then - rmdir "${TEMPF}" - else - if [[ $KEEP == "true" ]]; then - mv "${FOLDER}" "${NEWFL}" - else - rm -rf "${FOLDER}" - fi - mv "${TEMPF}" "${FOLDER}" - fi -} - -final-remote () { - if [[ -z "$(ls ${TEMPF})" ]]; then - rmdir "${TEMPF}" - else - sudo scp -r "${TEMPF}" "${ADDR}:/srv/backup/${TEMPF}" || exit 1 - if [[ $KEEP == "true" ]]; then - sudo ssh "${ADDR}" "cd /srv/backup; mv \"${FOLDER}\" \"${NEWFL}\"" - else - sudo ssh "${ADDR}" "cd /srv/backup; rm -rf \"${FOLDER}\"" - fi - sudo scp -r "${TEMPF}" "${ADDR}:/srv/backup" && rm -rf "${TEMPF}" - sudo ssh "${ADDR}" "cd /srv/backup; mv \"${TEMPF}\" \"${FOLDER}\"" - fi -} - cprompt () { - if [[ $UNATTENDED == "true" ]]; then return; fi - read -r -s -N 1 -p "Continue [Enter]?" + if [[ $UNATTENDED == "true" ]]; then + return; + fi + read -r -s -N 1 -p "Press 'Enter' to continue " if [[ $REPLY != $'\n' ]]; then printf "\n" - printf " Script stopped!\n" - if [[ $SEND == "true" ]]; then - final-remote - else - final-local - fi - exit + printf " Backup stopped!\n" + return 1 + else + printf "\n" fi } @@ -76,11 +47,7 @@ while getopts ':s:pku' OPT; do done shift $((OPTIND -1)) -if [[ $SEND == "true" ]]; then - FOLDER="_$(hostname -f)_" -else - FOLDER="_vols_" -fi +FOLDER="_vols_" if [[ $# > 0 ]]; then VOLUMES="$(sudo docker volume ls -q |grep "${1}")" @@ -93,23 +60,15 @@ if [[ -z $VOLUMES ]]; then exit 1 fi -if [[ $SEND == "true" ]]; then - if sudo ssh "${ADDR}" test -d "/srv/backup/${FOLDER}"; then - LASTF="$(sudo ssh "${ADDR}" ls -d --format=single-column ${FOLDER}* |tail -n1)" - else - LASTF="${FOLDER}" - fi +if [[ -d ${FOLDER} ]]; then + LASTF="$(ls -d --format=single-column ${FOLDER}* |tail -n1)" else - if [[ -d ${FOLDER} ]]; then - LASTF="$(ls -d --format=single-column ${FOLDER}* |tail -n1)" - else - LASTF="${FOLDER}" - fi + LASTF="${FOLDER}" fi INDEX="$((( ${LASTF#${FOLDER}} + 0 )))" NEWFL="${FOLDER}$(printf "%05d" $((( ${INDEX} + 1 ))))" -TEMPF="$(mktemp -dt -p $PWD XXXXXXXXXXXXXXX)" +TEMPF="$(mktemp -dt -p $PWD _XXXXXXXXXXXXXXX_)" for VOL in ${VOLUMES}; do if [[ $REMOVE == "true" ]]; then @@ -118,18 +77,35 @@ for VOL in ${VOLUMES}; do TAR="${VOL}.tar.bz2" fi printf "${VOL} --> ${TEMPF}/${TAR}\n" - cprompt + cprompt || break sudo docker run --rm --log-driver none \ -v "${VOL}:/volume" \ -v "${TEMPF}:/backup" \ loomchild/volume-backup backup -v "${TAR}" - sudo chmod 400 "${TEMPF}/${TAR}" + sudo chmod 600 "${TEMPF}/${TAR}" done -if [[ $SEND == "true" ]]; then - final-remote -else - final-local +if [[ -z "$(ls -A ${TEMPF})" ]]; then + rmdir "${TEMPF}" +else + if [[ $KEEP == "true" ]]; then + mv "${FOLDER}" "${NEWFL}" + else + rm -rf "${FOLDER}" + fi + if mv "${TEMPF}" "${FOLDER}"; then + if [[ $SEND == "true" ]]; then + if [[ $ADDR =~ ":" ]]; then + if sudo ssh "${ADDR%:*}" "mkdir -p ${ADDR#*:}"; then + sudo scp "${FOLDER}"/* "${ADDR}" + fi + else + if sudo ssh "${ADDR}" "mkdir -p ${PWD}/_$(hostname -f)_"; then + sudo scp "${FOLDER}"/* "${ADDR}:${PWD}/_$(hostname -f)_" + fi + fi + fi + fi fi set +o xtrace