#!/bin/bash
#                       /usr/local/bin/syncusb
# https://crystalfaeries.net/posix/bin/syncusb
# celeste:crystalfaery SYNCUSB 2018-09-06 08:55:52+00:00
# synchronize fey's data with SanDisk 128GB USB ThumbDrive

let hd_full=$(df --full		|	grep	/dev/mapper/fey--vg-home		|	sed	's/\%.*$// ; s/^.* //')
echo "hd_full=${hd_full}"

case	"$(ls -FlaR /dev/disk/by-uuid/	| \
	grep sdb1			| \
	sed 's/ -> .*$// ; s/^.* //')"	in

ca47ec33-18eb-4b28-9604-54a6e6855cc7)	# 128GB USB ThumbDrive SanDisk
	echo	"last saw 128GB USB ThumbDrive as:"
	if	$( grep	sdb1	/etc/mtab > /dev/null 2>&1 )
	then
		echo	"`grep	sdb1	/etc/mtab`"	# we seem to be mounted already?
	else
		echo	"`grep	sdb1	/proc/partitions`"	# we are not mounted?
	sudo	mkdir	-p				  /media/`whoami`/ca47ec33-18eb-4b28-9604-54a6e6855cc7	&&	\
	sudo	chown	`whoami`:			  /media/`whoami`/ca47ec33-18eb-4b28-9604-54a6e6855cc7
	sudo	fsck	-t ext4				/dev/disk/by-uuid/ca47ec33-18eb-4b28-9604-54a6e6855cc7	&&	\
	sudo	mount	-t ext4 -o errors=remount-ro	/dev/disk/by-uuid/ca47ec33-18eb-4b28-9604-54a6e6855cc7		\
							  /media/`whoami`/ca47ec33-18eb-4b28-9604-54a6e6855cc7	|| exit $?
	fi

	let usb_full=$(df --full	|	grep	ca47ec33-18eb-4b28-9604-54a6e6855cc7	|	sed	's/\%.*$// ; s/^.* //')
	echo	 "usb_full=${usb_full}"
	if [	${usb_full}	-lt	95	]
	then	# have space on USB drive so backup to it!
		echo -n	"I have space on USB drive so back-up to it with deleting? "
		read	choice
		case "${choice}" in
n | no )
		;;
* )
		rsync --delete	-auvH --exclude=audio	\
			--exclude=video/security_now/	\
			$HOME/crystalfaeries.net/{.??,}* /media/`whoami`/ca47ec33-18eb-4b28-9604-54a6e6855cc7
		rsync		-auvH			\
			--exclude=video/security_now/	\
			$HOME/crystalfaeries.net/{.??,}* /media/`whoami`/ca47ec33-18eb-4b28-9604-54a6e6855cc7
		;;
		esac

	else	# outa space on USB drive so exclude audio
		echo -n	"I'm out of space on USB drive so back-up all but audio to it with deleting? "
		read	choice
		case "${choice}" in
n | no )
		;;
* )
		rsync --delete	-auvH --exclude=audio	\
			--exclude=video/security_now/	\
			$HOME/crystalfaeries.net/{.??,}* /media/`whoami`/ca47ec33-18eb-4b28-9604-54a6e6855cc7
		;;
		esac

	fi
	pushd						/media/`whoami`/ca47ec33-18eb-4b28-9604-54a6e6855cc7
	yes|fdedupe
	    fdedupe -f
	popd

	if [	${hd_full}	-lt	$(head -n 1 $HOME/.downloadlimit)	]
	then	# have space on HD so download to it!
		echo -n	"I have space on HD so downloading to it: (dry-run) ? "
		read	choice
		case "${choice}" in
n | no )
		;;
* )
		rsync --dry-run -auvH --exclude=audio	\
			--exclude=video/security_now/	\
			/media/`whoami`/ca47ec33-18eb-4b28-9604-54a6e6855cc7/{.??,}*	\
			$HOME/crystalfaeries.net	|&	less -X
		;;
		esac

		# now incrementally unbackup audio directories by size
		echo -n	"Now incrementally unbackup audio directories by size ? "
		read	choice
		case "${choice}" in
n | no )
		;;
* )
		for d in $(find /media/`whoami`/ca47ec33-18eb-4b28-9604-54a6e6855cc7/audio -maxdepth 1 -type d -exec du -s {} \;	| \
			sort -n	| \
			cut -f2-)
		do
			echo	"${d}"
			rsync -auvH	"${d}"	\
			$HOME/crystalfaeries.net/audio	|&	less -X
			let hd_full=$(df --full | grep /dev/mapper/fey--vg-home | sed 's/\%.*$// ; s/^.* //')
			echo "hd_full=${hd_full}"
			if [	${hd_full}	-ge	$(head -n 1 $HOME/.downloadlimit)	]
			then
				df --full
				exit	$?
			fi
		done
		;;
		esac

	else	# outa space on HD so exclude audio
		echo -n	"I'm out of space on HD so download all but audio to it? "
		read	choice
		case "${choice}" in
n | no )
		;;
* )
		rsync -auvH --exclude=audio	/media/`whoami`/ca47ec33-18eb-4b28-9604-54a6e6855cc7/{.??,}*	$HOME/crystalfaeries.net
		;;
		esac

	fi
	exit	$?
	;;

*)	# None of our business... yet
	echo -n	"last saw as /dev/sdb1: "
	if	$( grep	/dev/sdb1	/etc/mtab > /dev/null 2>&1 )
	then
		echo	"`grep	/dev/sdb1	/etc/mtab`"	# we seem to be mounted already?
	else
		echo	"`ls -FlaR /dev/disk/by-uuid/ | grep sdb1`"	# get the UUID
	fi
	exit	$?
	;;
esac
exit	$?
