summaryrefslogtreecommitdiff
path: root/bin/backup
diff options
context:
space:
mode:
Diffstat (limited to 'bin/backup')
-rwxr-xr-xbin/backup64
1 files changed, 41 insertions, 23 deletions
diff --git a/bin/backup b/bin/backup
index 72c69c3..9e73703 100755
--- a/bin/backup
+++ b/bin/backup
@@ -1,36 +1,54 @@
#!/bin/sh
-# Incremental backup using rsync(1).
-[ "$USER" = root ] || exec sudo "$0" "$@"
+# A backup a day keeps the doctor away.
-backup() {
- date=$(date +%Y%m%d_%H%M%S)
- last=$(rsync --list-only "$dest/" 2>/dev/null | cut -b 47- | tail -1)
+usage() {
+ echo "Usage: $0 [-nv] [[[user@]host]:dir]
- case $last in
- ([12]*) opt_link=--link-dest=../$last;;
- (*) opt_link=;;
- esac
+Incremental backup using rsync(1). If run as root, a full system
+backup is performed. Otherwise, the user's home directory is backed.
- rsync -HSxa$optv --exclude-from=$ignore $opt_link / /boot "$dest/$date"
-}
+Options:
+-n dry-run
+-v verbose
-dest=/.history
-ignore=/etc/backup/ignore
+Files:
+- $HOME/.backupignore exclude files from user backup (non root)
+- /etc/backupignore exclude files from system backup (root)
-while getopts :d:i:nv opt; do
+Environment:
+- BACKUP backup directory"
+}
+
+while getopts :nv opt; do
case $opt in
- (d) dest="$OPTARG" ;;
- (i) ignore="$OPTARG" ;;
(n|v) optv="$opt$optv" ;;
- (*) echo "Usage: $0 [-nv] [-d [host:]dir] [clean|diff]"; exit 1 ;;
+ (*) usage; exit 1 ;;
esac
done
shift $((OPTIND - 1))
-[ "$1" ] && cmd=$1 && shift || cmd=""
-case $cmd in
-(""|save) backup ;;
-(clean) exec backup-clean ${optv+-$optv} "$dest";;
-(diff) exec diffdir "$@";;
-esac
+BACKUP=${1:-$BACKUP}
+[ "$BACKUP" ] || { usage; exit 1; }
+
+[ "$USER" = root ] &&
+ ignore=/etc/backupignore volumes='/ /boot' ||
+ ignore="$HOME/.backupignore" volumes="$HOME"
+[ -f "$ignore" ] && ignore="--exclude-from=$ignore" || ignore=
+
+now=$(date +%F)
+opt_link=''
+past=$(rsync --list-only "$BACKUP/" 2>/dev/null | awk '{print $NF}' | sort -r)
+for f in $past
+do
+ case $f in
+ ([0-9][0-9][0-9][0-9]-*) ;;
+ (*) continue ;;
+ esac
+ [ "$f" = "$now" ] && continue
+ opt_link="--link-dest=../$f"
+ break
+done
+
+echo "# Backup $volumes to $BACKUP/$now"
+exec rsync -HSXxa$optv $ignore $opt_link $volumes "$BACKUP/$now"