All pastes #2092666 Raw Edit

Untitled

public shellscript v1 · immutable
#2092666 ·published 2011-10-23 00:11 UTC
rendered paste body
#!SHEBANGPATH=/opt/bin:/opt/local/bin:/opt/sbin:/opt/local/sbin/:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/binSOURCE="SOURCELINE"TARGET="TARGETLINE"NAME=NAMELINECOMPRESS=COMPRESSLINEEXPIRE=EXPIRELINECHGOWN=CHOWNLINEPORT=PORTLINEDATE=$(which date)RSYNC=$(which rsync)NICE=$(which nice)FIND=$(which find)TMPFILE=/tmp/back_$$.logCURRENT="$TARGET/backup.current"INCOMPLETE="$TARGET/backup.incomplete"out(){	if [ -z "$1" ]; then		e=127;	else		e="$1";	fi	URL="http://server.org/backup.php?b=$NAME&e=$e"	WGET=$(which curl);	if [ -x "$WGET" ]; then		$WGET $URL >/dev/null 2>&1		exit $e	fi	WGET=$(which wget);	if [ -x "$WGET" ]; then		$WGET -O /dev/null $URL >/dev/null 2>&1		exit $e	fi		exit $e}	if [ "$COMPRESS" == "1" ]; then		Z=z	fi	if [ -z "$RSYNC" ]; then		out -1	fi	if [ -z "$DATE" ]; then		out -2	fi	if [ -z "$NICE" ]; then		out -3	fi		if [ -z "$FIND" ]; then		out -4	fi	mkdir -p "$TARGET" || out -5	cd "$TARGET" || out -6	if [ -L "$CURRENT" ]; then		# we have a successful backup. Use it as link-dst		linkdst="--link-dest=$CURRENT"	else		# search for an old backup		OLDB=$($FIND . -maxdepth 1 -type d -name '[0-9]*' | sort -n | tail -n1)		if [ ! -z "$OLDB" ] && [ -d "$OLDB" ]; then			ln -s "$OLDB" "$CURRENT"				linkdst="--link-dest=$CURRENT"		fi	fi	if [ ! -z "$CHGOWN" ]; then		perm='--no-owner --no-group --no-perms'	fi	if [ ! -f "$TARGET/.rsync-exclude" ]; then		touch "$TARGET/.rsync-exclude"	fi	if [ -f "$TARGET/.rsync-filter" ]; then                RF=$($FIND $TARGET/.rsync-filter -maxdepth 1 -size 5c | wc -l)                if [ $RF -eq 1 ]; then                        rm "$TARGET/.rsync-filter"                else                        FILTER="--filter=merge $TARGET/.rsync-filter"                fi        fi	if [ -r /etc/rsync.secrets ]; then		secrets="--password-file=/etc/rsync.secrets"	fi	if [ ! -z "$PORT" ]; then		port="--port=$PORT"	fi			EXCLUDE="--exclude-from=$TARGET/.rsync-exclude"	OPTS="--ignore-errors --delete --timeout=1200 --numeric-ids ${linkdst} ${secrets} ${port} -a${Z}vSXH ${perm}"	if [ -z "$FILTER" ]; then		$RSYNC "$EXCLUDE" $OPTS "${SOURCE}/" "${INCOMPLETE}" > $TMPFILE 2>&1	else		$RSYNC "${FILTER}" "$EXCLUDE" $OPTS "${SOURCE}/" "${INCOMPLETE}" > $TMPFILE 2>&1	fi	retval=$?	if [ "$retval" -eq "12" ]; then		rm $TMPFILE		OPTS="--ignore-errors --delete --timeout=1200 --numeric-ids ${linkdst} ${secrets} ${port} -a${Z}vSH ${perm}"		if [ -z "$FILTER" ]; then			$RSYNC "$EXCLUDE" $OPTS "${SOURCE}/" "${INCOMPLETE}" > $TMPFILE 2>&1		else			$RSYNC "${FILTER}" "$EXCLUDE" $OPTS "${SOURCE}/" "${INCOMPLETE}" > $TMPFILE 2>&1		fi		retval=$?	fi	if [ "$retval" -eq "0" ]; then		# we have a valid and successful new backup		NEWB=$TARGET/$($DATE +%Y%m%d.%H%M%S)		mv "$INCOMPLETE" "$NEWB" || out -7		if [ -L "$TARGET/backup.current" ]; then			rm "$CURRENT" || out -8		fi		ln -s "$NEWB" "$CURRENT" || out -9		if [ ! -z "$CHGOWN" ]; then			chmod -R 777 ${NEWB} 2>/dev/null			chown -R "$CHGOWN" ${NEWB}		fi		rm -f $TMPFILE || out -11		# Purging old backups		cd $TARGET || out -10				ANZ=$($FIND . -maxdepth 1 -name '[0-9]*' -type d | sort -n | wc -l)		if [ $EXPIRE -lt 1 ]; then			EXPIRE=1		fi		if [ -z "$ANZ" ]; then			ANZ=0		fi		SKIP=0		while [ $ANZ -gt $EXPIRE ] && [ $SKIP -le 10 ]; do					# TARGET=/foo/bar/			# TOPURGE=./20111018122112			TOPURGE=$($FIND . -maxdepth 1 -type d -name '[0-9]*' | sort -n | head -n1)			if [ -d "$TOPURGE" ]; then				CUR=$(pwd)				cd "$TOPURGE" || exit -12				FULLTOPURGE=$(pwd -P)				cd "$CUR"				if [ "$NEWB" != "$FULLTOPURGE" ]; then					rm -rf "$FULLTOPURGE"				fi			fi			let ANZ--			let SKIP++		done			fi	out $retval