summaryrefslogtreecommitdiff
path: root/bin/backup
blob: adce78d76e68ad7e9e5310ec4e3393b3d6ea2d14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/sh
# Incremental backup using rsync(1).

backup() {
	date=$(date +%Y%m%d_%H%M%S)
	last=$(rsync --list-only "$dest/" 2>/dev/null | cut -b 47- | tail -1)

	case $last in
	([12]*) opt_link=--link-dest=../$last;;
	(*) opt_link=;;
	esac

	rsync -HSxa$optv --exclude-from=$ignore $opt_link $volumes "$dest/$date"
}

dest=/.history
ignore=/etc/backupignore
volumes='/ /boot'

while getopts :d:i:nuv opt; do
	case $opt in
	(d) dest="$OPTARG" ;;
	(i) ignore="$OPTARG" ;;
	(n|v) optv="$opt$optv" ;;
	(u) optu=1 volumes="$HOME" ignore="$HOME/.backupignore" ;;
	(*) echo "Usage: $0 [-nuv] [-d [[user@]host:]dir] [clean|diff]"; exit 1 ;;
	esac
done
shift $((OPTIND - 1))

[ "$optu" ] || [ "$USER" = root ] || exec sudo "$0" "$@"

[ "$1" ] && cmd=$1 && shift || cmd=""
case $cmd in
(""|save) backup ;;
(clean) exec backup-clean ${optv+-$optv} "$@" "$dest";;
(diff) exec diffdir "$@";;
esac