From: Andrew Lorimer Date: Sat, 30 May 2026 12:31:17 +0000 (+1000) Subject: backup-tank-2: fix race condition in report; show copied size rather than source X-Git-Url: https://git.lorimer.id.au/scripts.git/diff_plain/3b98a43f928c507711eb7a34fe727bf06de20b78 backup-tank-2: fix race condition in report; show copied size rather than source --- diff --git a/backup-tank-2.sh b/backup-tank-2.sh index 816ce12..5d66a1f 100755 --- a/backup-tank-2.sh +++ b/backup-tank-2.sh @@ -102,20 +102,19 @@ for FILE_PATH in "${!INCLUDE_PATHS[@]}"; do RSYNC_CMD+="q" fi RSYNC_CMD+=" "${EXCLUDE_ARGS[@]}" \"$FILE_PATH\" \"$MOUNT_POINT$PARENT/\"" - if [[ -n "${RSYNC_CMDS[$DRIVE]}" ]]; then - RSYNC_CMDS["$DRIVE"]+=" & $RSYNC_CMD" - else - RSYNC_CMDS["$DRIVE"]="$RSYNC_CMD" - fi + RSYNC_CMDS["$DRIVE"]+="${RSYNC_CMDS[$DRIVE]:+$'\n'}$RSYNC_CMD" done for DRIVE in "${!RSYNC_CMDS[@]}"; do - if [[ $DEBUG -eq 1 ]]; then - echo "${RSYNC_CMDS[$DRIVE]}" - fi - if [[ $TEST -eq 0 ]]; then - eval "${RSYNC_CMDS[$DRIVE]}" & - fi + while IFS= read -r cmd; do + [[ -z "$cmd" ]] && continue + if [[ $DEBUG -eq 1 ]]; then + echo "$cmd" + fi + if [[ $TEST -eq 0 ]]; then + eval "$cmd" & + fi + done <<< "${RSYNC_CMDS[$DRIVE]}" done wait @@ -123,7 +122,7 @@ wait echo "" for DRIVE in "${!RSYNC_CMDS[@]}"; do - DRIVE_SERIAL="$(lsblk -n -o SERIAL `mount| grep /mnt/backup2 | awk 'NR==1{print $1}'|sed 's/[0-9]*//g'`)" + DRIVE_SERIAL="$(lsblk -n -o SERIAL `mount| grep /mnt/backup2 | awk 'NR==1{print $1}' | sed 's/[0-9]*//g'`)" echo "-------------------------------------------" echo "Backup summary for Cold Backup Drive $DRIVE" echo "-------------------------------------------" @@ -133,11 +132,11 @@ for DRIVE in "${!RSYNC_CMDS[@]}"; do echo "" for FILE_PATH in "${!INCLUDE_PATHS[@]}"; do if [[ "${INCLUDE_PATHS[$FILE_PATH]}" == "$DRIVE" ]]; then - echo "$FILE_PATH ("$(du -sh "$FILE_PATH" 2>/dev/null | cut -f1)")" + echo "$FILE_PATH ("$(du -sh "$MOUNT_POINT_PREFIX$DRIVE$FILE_PATH" 2>/dev/null | cut -f1)")" if [ -d "$FILE_PATH" ]; then for EXCLUDE_PATH in "${!EXCLUDE_PATHS[@]}"; do if [[ "$EXCLUDE_PATH" =~ ^"$FILE_PATH"* ]]; then - echo " Excluding .${EXCLUDE_PATH:${#FILE_PATH}} ($(du -sh "$EXCLUDE_PATH" 2>/dev/null | cut -f1))" + echo " Excluding .${EXCLUDE_PATH:${#FILE_PATH}}" fi done fi