#!/bin/sh
#
#	$Id: backup,v 1.6 2004/05/29 12:29:52 bb Exp $
#
#	Backup script for Mac OS X
#
#	xx.xx.2001 bb	created for Mac OS X Public Beta
#	25.03.2001 bb	modified for Mac OS X final
#	22.06.2001 bb	modified to use ditto
#	01.07.2001 bb	added handling of the Mac OS X symbolic links in /
#			and of /dev
#	15.07.2001 bb	-V removed from ditto command line
#	19.08.2001 bb	modified the ln and cp commands to be able to write
#			a new backup over an older one ("ln -s" -> "ln -sf",
#			"cp -Rp /dev $1/dev" -> "cp -Rp /dev $1")
#	30.08.2002 bb	modified handling of /cores (with Mac OS X 10.2,
#			it is a directory, before it was a symlink)
#	23.11.2003 bb	CVS Id string added
#	29.05.2004 bb	no longer backup /dev with cp (seems to cause
#			a hard abort of the while loop with Mac OS X 10.3,
#			so the backup becomes incomplete); some logging added
#

if [ "$1" = "" ]; then
	echo "Usage: $0 <target directory>"
	echo "	Backup up a HFS+ root file system to the target directory"
	echo "	preserving Mac resource forks and Unix access rights."
	exit 1
fi

if [ $(id -u) -ne 0 ]; then
	echo "$0: you must be root to use this command"
	exit 1
fi

ls -1a / | while read i; do
	echo `date` ": begin backup /$i"
	case "$i" in
	\.|\.\.|Volumes)
		;;
	var|tmp|etc)
		ln -sf "private/$i" "$1/$i"
		;;
	cores)
		if [ -L /cores ]; then	# Mac OS X up to 10.1.5
			ln -sf "private/$i" "$1/$i"
		else			# Mac OS X 10.2
			ditto -rsrcFork "/$i" "$1/$i" 
		fi
		;;
	mach)
		ln -sf "/mach.sym" "$1/$i"
		;;
	*)
		ditto -rsrcFork "/$i" "$1/$i" 
		;;
	esac
	echo `date` ": end   backup /$i ($?)"
done
