backup-tank-2: fix race condition in report; show copied size rather than source
authorAndrew Lorimer <andrew@lorimer.id.au>
Sat, 30 May 2026 12:31:17 +0000 (22:31 +1000)
committerAndrew Lorimer <andrew@lorimer.id.au>
Sat, 30 May 2026 12:31:17 +0000 (22:31 +1000)
backup-tank-2.sh
index 816ce12f3026385db4566f1fad8d5a930cb496ae..5d66a1f5cf0284596be9075cdc5e698c3adbb543 100755 (executable)
@@ -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