From ae000058ac1b7b1b98e26282e8ed1e90f2c42727 Mon Sep 17 00:00:00 2001 From: Ralf Zerres Date: Fri, 24 Nov 2017 13:51:51 +0100 Subject: [PATCH] snap-sync: improve parse_params() Signed-off-by: Ralf Zerres --- bin/snap-sync | 135 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 99 insertions(+), 36 deletions(-) diff --git a/bin/snap-sync b/bin/snap-sync index b52fefb..4d2bed7 100755 --- a/bin/snap-sync +++ b/bin/snap-sync @@ -273,17 +273,39 @@ parse_params () { fi shift 2 ;; - -d|--description|--description-finished) - description="$2" - shift 2 + --description-finished) + shift + snap_description_finished="${*}" + snap_description_finished="${snap_description_finished%% -*}" + params=$* + set -- $snap_description_finished + count=$# + set -- $params + shift $count ;; --description-running) - description="$2" - shift 2 + shift + snap_description_running=${*} + snap_description_running="${snap_description_running%% -*}" + params=$* + set -- $snap_description_running + count=$# + set -- $params + shift $count ;; - --description-synced) - description="$2" - shift 2 + -d|--description|--description-synced) + shift + snap_description_synced="${*}" + snap_description_synced="${snap_description_synced%% -*}" + params=$* + set -- $snap_description_synced + count=$# + set -- $params + shift $count + ;; + --dry-run) + dryrun=1 + shift 1 ;; -i|--interactive) interactive=1 @@ -295,6 +317,10 @@ parse_params () { donotify=0 shift ;; + --remote) + remote=$2 + shift 2 + ;; -s|--subvolid|--SUBVOLID) subvolid_cmdline="$2" shift 2 @@ -311,6 +337,10 @@ parse_params () { verbose=1 shift 1 ;; + --version) + printf "%s v%s\n" "$progname" "$version" + exit 0 + ;; --backupdir=*) backupdir_cmdline=${1#*=} shift @@ -323,13 +353,41 @@ parse_params () { fi shift ;; - --dry-run) - dryrun=1 - shift 1 + --description-finished=*) + snap_description_finished="${*#*=}" + snap_description_finished="${snap_description_finished%% -*}" + params_new=${*#*=} + params_new=${params_new##${snap_description_finished}} + if [ ${#params_new} -gt 0 ]; then + set -- $snap_description_finished + count=$# + set -- $params_new + fi ;; - --remote) - remote=$2 - shift 2 + --description-running=*) + snap_description_running="${*#*=}" + snap_description_running="${snap_description_running%% -*}" + params_new=${*#*=} + params_new=${params_new##${snap_description_running}} + params=$# + if [ ${#params_new} -gt 0 ]; then + set -- $snap_description_running + count=$# + set -- $params_new + fi + ;; + -d=*|--description=*|--description-synced=*) + snap_description_synced="${*#*=}" + snap_description_synced="${snap_description_synced%% -*}" + params_new=${*#*=} + params_new=${params_new##${snap_description_synced}} + if [ ${#params_new} -gt 0 ]; then + set -- $snap_description_synced + count=$# + set -- $params_new + else + break + fi ;; --remote=*) remote=${1#*=} @@ -366,9 +424,9 @@ parse_params () { . $SNAPPER_CONFIG selected_configs=${selected_configs:-$SNAPPER_CONFIGS} - snap_description_synced=${description_lastsync:-"snap-sync last incremental"} - snap_description_finished=${description_finished:-"snap-sync backup"} - snap_description_running=${description_running:-"snap-sync in progress"} + snap_description_finished=${snap_description_finished:-"snap-sync backup"} + snap_description_running=${snap_description_running:-"snap-sync in progress"} + snap_description_synced=${snap_description_synced:-"snap-sync last incremental"} uuid_cmdline=${uuid_cmdline:-"none"} target_cmdline=${target_cmdline:-"none"} @@ -394,8 +452,8 @@ parse_params () { printf "Snapper Descriptions\n" printf " backup finished: '%s'\n" "$snap_description_finished" - printf " backup synced: '%s'\n" "$snap_description_synced" printf " backup running: '%s'\n" "$snap_description_running" + printf " backup synced: '%s'\n" "$snap_description_synced" if [ "$verbose" ]; then snap_sync_options="verbose=true"; fi if [ "$dryrun" ]; then snap_sync_options="${snap_sync_options} dry-run=true"; fi @@ -965,22 +1023,26 @@ $progname $version Usage: $progname [options] Options: - -d, --description Change the snapper description. Default: "latest incremental backup" - -c, --config Specify the snapper configuration to use. Otherwise will perform for each snapper - configuration. Can list multiple configurations within quotes, space-separated - (e.g. -c "root home"). - -n, --noconfirm Do not ask for confirmation for each configuration. Will still prompt for backup - --batch directory name on first backup" - -s, --subvolid Specify the subvolume id of the mounted BTRFS subvolume to back up to. Defaults to 5. - -u, --UUID Specify the UUID of the mounted BTRFS subvolume to back up to. Otherwise will prompt." - If multiple mount points are found with the same UUID, will prompt user." - -t, --TARGET Specify the mountpoint of the BTRFS subvolume to back up to. - --remote
Send the snapshot backup to a remote machine. The snapshot will be sent via ssh. You - should specify the remote machine's hostname or ip address. The 'root' user must be - permitted to login on the remote machine. - --dry-run perform a trial run where no changes are made. - -v, --verbose Be more verbose on what's going on. - + -d, --description Change the snapper description. Default: "latest incremental backup" + --label-finished snapper description tagging successful jobs. Default: "snap-sync backup" + --label-running snapper description tagging active jobs. Default: "snap-sync in progress" + --label-synced snapper description tagging last synced jobs. + Default: "snap-sync last incremental" + -c, --config Specify the snapper configuration to use. Otherwise will perform for each snapper + configuration. Can list multiple configurations within quotes, space-separated + (e.g. -c "root home"). + -n, --noconfirm Do not ask for confirmation for each configuration. Will still prompt for backup + --batch directory name on first backup" + -s, --subvolid Specify the subvolume id of the mounted BTRFS subvolume to back up to. Defaults to 5. + -u, --uuid Specify the UUID of the mounted BTRFS subvolume to back up to. Otherwise will prompt." + If multiple mount points are found with the same UUID, will prompt user." + -t, --target Specify the mountpoint of the BTRFS subvolume to back up to. + --remote
Send the snapshot backup to a remote machine. The snapshot will be sent via ssh. You + should specify the remote machine's hostname or ip address. The 'root' user must be + permitted to login on the remote machine. + --dry-run perform a trial run where no changes are made. + -v, --verbose Be more verbose on what's going on. + --version show program version EOF exit 1 @@ -1100,10 +1162,11 @@ ssh="" #trap 'traperror ${LINENO} $?' ERR trap trapkill TERM INT -parse_params $@ - check_prerequisites +# validate commandline options, set resonable defaults +parse_params $@ + # read mounted BTRFS structures get_disk_infos