diff options
| author | Laurent Cozic <laurent@cozic.net> | 2018-02-24 12:26:46 +0000 |
|---|---|---|
| committer | Laurent Cozic <laurent@cozic.net> | 2018-02-24 12:26:46 +0000 |
| commit | c5af8528bbdc09fde0a03b3ce270191c3b1b4a96 (patch) | |
| tree | 5ea4478748584084f580950c62e52a4dcd0a285d | |
| parent | 051733df1e7c03f68d81789ea7e9ca81b7203cc4 (diff) | |
| parent | c211541848bfc8b68d57aa330cf959e69cd40f23 (diff) | |
Merge branch 'master' into expiration-strategy
| -rwxr-xr-x | rsync_tmbackup.sh | 59 |
1 files changed, 29 insertions, 30 deletions
diff --git a/rsync_tmbackup.sh b/rsync_tmbackup.sh index 2a21fe2..cdd3fd1 100755 --- a/rsync_tmbackup.sh +++ b/rsync_tmbackup.sh @@ -57,35 +57,24 @@ fn_parse_date() { local date_format="$2" # Converts YYYY-MM-DD-HHMMSS to YYYY-MM-DD HH:MM:SS and then to Unix Epoch. - - if [[ -z "$date_format" || "$date_format" == "Y-m-d H:i:s" ]]; then - case "$OSTYPE" in - linux*) date -d "${date_string:0:10} ${date_string:1date_string:2}:${date_string:13:2}:${date_string:15:2}" +%s ;; - cygwin*) date -d "${date_string:0:10} ${date_string:1date_string:2}:${date_string:13:2}:${date_string:15:2}" +%s ;; - darwin*) date -j -f "%Y-%m-%d-%H%M%S" "$date_string" "+%s" ;; - FreeBSD*) date -j -f "%Y-%m-%d-%H%M%S" "$date_string" "+%s" ;; - esac - else - case "$OSTYPE" in - linux*) date -d "${date_string:0:10} 00:00:00" +%s ;; - cygwin*) date -d "${date_string:0:10} 00:00:00" +%s ;; - darwin*) date -j -f "%Y-%m-%d" "$date_string" "+%s" ;; - FreeBSD*) date -j -f "%Y-%m-%d" "$date_string" "+%s" ;; - esac - fi -} - -fn_run_cmd() { - if [ -n "$SSH_DEST_FOLDER_PREFIX" ] - then - eval "$SSH_CMD '$1'" - else - eval $1 - fi + case "$OSTYPE" in + linux*) date -d "${1:0:10} ${1:11:2}:${1:13:2}:${1:15:2}" +%s ;; + cygwin*) date -d "${1:0:10} ${1:11:2}:${1:13:2}:${1:15:2}" +%s ;; + darwin8*) yy=`expr ${1:0:4}` + mm=`expr ${1:5:2} - 1` + dd=`expr ${1:8:2}` + hh=`expr ${1:11:2}` + mi=`expr ${1:13:2}` + ss=`expr ${1:15:2}` + # Because under MacOS X Tiger 'date -j' doesn't work, we do this: + perl -e 'use Time::Local; print timelocal('$ss','$mi','$hh','$dd','$mm','$yy'),"\n";' ;; + darwin*) date -j -f "%Y-%m-%d-%H%M%S" "$1" "+%s" ;; + FreeBSD*) date -j -f "%Y-%m-%d-%H%M%S" "$1" "+%s" ;; + esac } fn_find_backups() { - fn_run_cmd "find "$DEST_FOLDER" -maxdepth 1 -type d -name \"????-??-??-??????\" -prune | sort -r" + fn_run_cmd "find "$DEST_FOLDER/" -maxdepth 1 -type d -name \"????-??-??-??????\" -prune | sort -r" } fn_expire_backup() { @@ -152,14 +141,15 @@ fn_expire_backups() { } fn_parse_ssh() { - if [[ "$DEST_FOLDER" =~ ^[A-Za-z0-9\._%\+\-]+@[A-Za-z0-9.\-]+\:.+$ ]] + # To keep compatibility with bash version < 3, we use grep + if echo "$DEST_FOLDER"|grep -Eq '^[A-Za-z0-9\._%\+\-]+@[A-Za-z0-9.\-]+\:.+$' then SSH_USER=$(echo "$DEST_FOLDER" | sed -E 's/^([A-Za-z0-9\._%\+\-]+)@([A-Za-z0-9.\-]+)\:(.+)$/\1/') SSH_HOST=$(echo "$DEST_FOLDER" | sed -E 's/^([A-Za-z0-9\._%\+\-]+)@([A-Za-z0-9.\-]+)\:(.+)$/\2/') SSH_DEST_FOLDER=$(echo "$DEST_FOLDER" | sed -E 's/^([A-Za-z0-9\._%\+\-]+)@([A-Za-z0-9.\-]+)\:(.+)$/\3/') SSH_CMD="ssh -p $SSH_PORT ${SSH_USER}@${SSH_HOST}" SSH_DEST_FOLDER_PREFIX="${SSH_USER}@${SSH_HOST}:" - elif [[ "$SRC_FOLDER" =~ ^[A-Za-z0-9\._%\+\-]+@[A-Za-z0-9.\-]+\:.+$ ]] + elif echo "$SRC_FOLDER"|grep -Eq '^[A-Za-z0-9\._%\+\-]+@[A-Za-z0-9.\-]+\:.+$' then SSH_USER=$(echo "$SRC_FOLDER" | sed -E 's/^([A-Za-z0-9\._%\+\-]+)@([A-Za-z0-9.\-]+)\:(.+)$/\1/') SSH_HOST=$(echo "$SRC_FOLDER" | sed -E 's/^([A-Za-z0-9\._%\+\-]+)@([A-Za-z0-9.\-]+)\:(.+)$/\2/') @@ -169,6 +159,15 @@ fn_parse_ssh() { fi } +fn_run_cmd() { + if [ -n "$SSH_DEST_FOLDER_PREFIX" ] + then + eval "$SSH_CMD '$1'" + else + eval $1 + fi +} + fn_find() { fn_run_cmd "find '$1'" 2>/dev/null } @@ -368,9 +367,9 @@ if [ -n "$(fn_find "$INPROGRESS_FILE")" ]; then fn_log_error "Previous backup task is still active - aborting (command: $RUNNINGCMD)." exit 1 fi - else + else RUNNINGPID="$(fn_run_cmd "cat $INPROGRESS_FILE")" - if [ "$RUNNINGPID" = "$(pgrep "$APPNAME")" ]; then + if [ "$RUNNINGPID" = "$(pgrep -o -f "$APPNAME")" ]; then fn_log_error "Previous backup task is still active - aborting." exit 1 fi |
