]> arthur.barton.de Git - backup-script.git/blobdiff - bin/backup-status
backup-status: "quick" mode is "-q", not "-p"!
[backup-script.git] / bin / backup-status
index 3948645362f87465f64620f059b98392a9017ff9..a5ea7c171c56c92a5ac977feb98c98659d973e6b 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 #
 # backup-script system for cloning systems using rsync
 # Copyright (c)2008-2013 Alexander Barton, alex@barton.de
@@ -17,9 +17,42 @@ QUICK=0
 export LC_ALL=C
 
 declare -i count=0
+declare -i snapshots=0
 
+# Default settings, can be overwritten in backup-script.conf:
 default_target=""
-default_user="root"
+default_generations=0
+
+Check_Size() {
+       # $1: directory
+       # $2: padding
+
+       if [ "$QUICK" = "0" ]; then
+               size=`du -sh "$1" | cut -f1`
+               echo "$2  - Size:" $size
+       fi
+}
+
+Check_Stamp() {
+       # $1: stamp file
+       # $2: padding
+
+       if [ -f "$1" ]; then
+               last=`stat "$1" | grep "^Modify: " \
+                 | cut -d':' -f2- | cut -d. -f1`
+               [ -n "$last" ] && echo "$2  - Date:" $last
+               unset code
+               source "$1"
+               case "$code" in
+                 0)    txt=", OK"; ;;
+                 24)   txt=", WARNING (some files vanished during backup)"; ;;
+                 *)    txt=", ERROR"
+               esac
+               [ -n "$code" ] && echo "$2  - Result code: $code$txt"
+       else
+               echo "$2  - No timestamp recorded!? Backup aborted?"
+       fi
+}
 
 if [ "$1" == "-q" ]; then
        QUICK=1
@@ -28,7 +61,7 @@ fi
 
 case "$1" in
     "-"*)
-       echo "Usage: $NAME [-p] [<system> [<system> [...]]]"
+       echo "Usage: $NAME [-q] [<system> [<system> [...]]]"
        exit 1
        ;;
 esac
@@ -50,36 +83,47 @@ fi
 for f in $sys; do
        [ -r "$f" -a -f "$f" ] || continue
 
-       system=`basename $f`
-       target="$default_target"
-
-       case "$system" in
+       fname=`basename $f`
+       case "$fname" in
                "backup-script.conf"|*.sh)
                        continue
                        ;;
        esac
 
-       # Read in configuration file
+       # Set global defaults
+       system="$fname"
+       target="$default_target"
+       generations="$default_generations"
+
+       # Read in system configuration file
        source "$f"
 
+       # Validate configuration
+       [ "$system" = "localhost" -o "$system" = "127.0.0.1" ] && local=1
+
        destdir="$target"
-       target="$target/$system"
+       target="$target/$fname"
 
        [ -d "$target" ] || continue
 
-       echo "-- $system -- "
-       echo "Storage: $target"
-       if [ "$QUICK" = "0" ]; then
-               size=$( du -sh "$target" | cut -f1 )
-               echo "Size: $size"
-       fi
-       if [ -f "$target/.stamp" ]; then
-               stat "$target/.stamp" | grep "^Modify: " | cut -d. -f1
-               unset code
-               source "$target/.stamp"
-               [ -n "$code" ] && echo "Result code: $code"
+       # System name
+       [ "$system" = "$fname" ] && echo "$fname" || echo "$fname [$system]"
+
+       # System target directory
+       echo "- Target: $target"
+
+       if [ $generations -gt 0 ]; then
+               for s in $target/[0-9]*-[0-9]*; do
+                       echo "  - Snapshot: $s"
+                       Check_Size "$s" "  "
+                       Check_Stamp "$s/.stamp" "  "
+                       snapshots=$snapshots+1
+               done
        else
-               echo "No timestamp recorded!?"
+               # Timestamp and result code
+               Check_Size "$s"
+               Check_Stamp "$target/.stamp"
+               snapshots=$snapshots+1
        fi
 
        count=$count+1
@@ -90,6 +134,8 @@ if [ $count -lt 1 ]; then
        echo "No backups found!"
        exit 1
 fi
-echo "$count system backups found."
+[ $count -eq 1 ] && sc="" || sc="s"
+[ $snapshots -eq 1 ] && ss="" || ss="s"
+echo "$count system backup$sc found, $snapshots snapshot$ss."
 
 # -eof-