#!/bin/bash
#                       /usr/local/bin/syncusb
# https://crystalfaeries.net/posix/bin/syncusb
# celeste:crystalfaery SYNCUSB 2021-04-06 04:20:56+00:00
# synchronize fey.crystalfaeries.net's data with SanDisk 128GB USB ThumbDrive
# synchronize fey.crystalfaeries.net's data with Corsair Survivor 16GB USB Tank

# CONFIGURATION:
let DEDUPE=3			# passes of fdedupe per partition
usergroup="celeste:staff"	# who owns the backup device + data?

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

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

# depending upon which mounter grabs it first:
b35367e8-70af-4c22-a7e9-10ec9a803135 | 6270af59-c029-4b5f-9c7a-16b62f1a660e | ca47ec33-18eb-4b28-9604-54a6e6855cc7 | feybackup)
	echo	"USB Thumbdrive:"
	if	$( grep	sdb		/etc/mtab > /dev/null 2>&1 )
	then
		echo	"`grep	sdb	/etc/mtab`"	# we seem to be mounted already?
	else
		echo	"`grep	sdb	/proc/partitions`"	# we are not mounted?
	sudo	mkdir	-p				  /media/`whoami`/"${uuid}"	&&	\
	sudo	chown	`whoami`:			  /media/`whoami`/"${uuid}"
	sudo	fsck	-t ext4				/dev/disk/by-uuid/"${uuid}"	&&	\
	sudo	mount	-t ext4 -o errors=remount-ro	/dev/disk/by-uuid/"${uuid}"		\
							  /media/`whoami`/"${uuid}"	|| exit $?
	fi

	let usb_full=$(df --full | grep "${uuid}" | sed 's/\%.*$// ; s/^.* //')
	echo	 "usb_full=${usb_full}"
	if [	${usb_full}	-ge	95	]
	then	# outa space on USB ThumbDrive so exclude audio backup
 		echo -n	"Backing-Up ONLY website NON-AUDIO contents to USB ThumbDrive..."

		#	WE ACCUMULATE .dar BACKUPS OF  FEY
		chown -R "${usergroup}"						\
				/media/`whoami`/"${uuid}"/fey.crystalfaeries.net			# correct permissions
		chmod 2775	/media/`whoami`/"${uuid}"/fey.crystalfaeries.net			# correct permissions
		rsync -auvH	"${HOME}"/crystalfaeries.net/fey.crystalfaeries.net/*			\
				/media/`whoami`/"${uuid}"/fey.crystalfaeries.net			# accumulate .dar backups until manual	intervention
		rsync -auvH	/media/`whoami`/"${uuid}"/fey.crystalfaeries.net/*			\
				"${HOME}"/crystalfaeries.net/fey.crystalfaeries.net			# accumulate .dar backups until auto	 intervention
		chown -R "${usergroup}"						\
				/media/`whoami`/"${uuid}"/fey.crystalfaeries.net			# correct permissions
		chmod 2775	/media/`whoami`/"${uuid}"/fey.crystalfaeries.net			# correct permissions

		# backup with deleting posix (which may have been a symlink)
		if [ -L	/media/`whoami`/"${uuid}"/posix ]
		then
		  rm	/media/`whoami`/"${uuid}"/posix	# clear symlink out of the way
		  mkdir	/media/`whoami`/"${uuid}"/posix	# ensure directory is present
		fi
		rsync	-auvH		/usr/local/{.??,}*				\
			--exclude	games/tor-browser_en-US				\
			--exclude	games/avidemux_2.7.4				\
			/media/`whoami`/"${uuid}"/posix # backup posix

		# backup withOUT deleting all but audio and some tansients:
#		rsync --delete	-auvH							\
		rsync		-auvH							\
			--exclude=audio							\
			--exclude=audio/security_now/					\
			--exclude=documents						\
			--exclude=fey.crystalfaeries.net							\
			--exclude=posix							\
			--exclude=video/security_now/					\
			--exclude=video/flute/flute_fundamentals_hd-wvwrzo2_r_q.mp4	\
			"${HOME}"/crystalfaeries.net/{.??,}*				\
			/media/`whoami`/"${uuid}"

		#	KEEP AUDACITY
		find					  "${HOME}"/crystalfaeries.net/audio/audacity/		\
				/media/`whoami`/"${uuid}"/audio/audacity/		\
			-type f	\! -links 1	-exec unhardlink {} \;
		find 		/media/`whoami`/"${uuid}"/				\
			-type f -size 0	-exec rm {} \;
		rsync -auvH								\
			--exclude=.audacity/.audacity-data/AutoSave			\
			--exclude=.audacity-temp					\
			--exclude=.audacity_temp					\
			--exclude=.audacity-tmp						\
							"${HOME}"/crystalfaeries.net/audio/audacity			\
				/media/`whoami`/"${uuid}"/audio			# backup Audacity from HD to SD
		rsync -auvH								\
			--exclude=.audacity/.audacity-data/AutoSave			\
			--exclude=.audacity-temp					\
			--exclude=.audacity_temp					\
			--exclude=.audacity-tmp						\
				/media/`whoami`/"${uuid}"/audio/audacity		\
				/home						# backup Audacity from SD to HD
		pushd		/media/`whoami`/"${uuid}"
		for i in {1..$DEDUPE} ; do
			fdedupe -f
		done
		popd
		pushd		/home/`whoami`/crystalfaeries.net/
		for i in {1..$DEDUPE} ; do
			fdedupe -f
		done
		popd
		find					  "${HOME}"/crystalfaeries.net/audio/audacity/	\
				/media/`whoami`/"${uuid}"/audio/audacity/	\
			-type f	\! -links 1	-exec unhardlink {} \;
		df --full

	else	# have space on USB ThumbDrive so backup to it!
		echo -n	"Backing-Up ALL website contents to USB ThumbDrive..."

		#	WE ACCUMULATE .dar BACKUPS OF  fey.crystalfaeries.net
		chown -R "${usergroup}"						\
				/media/`whoami`/"${uuid}"/fey.crystalfaeries.net			# correct permissions
		chmod 2775	/media/`whoami`/"${uuid}"/fey.crystalfaeries.net			# correct permissions
		rsync -auvH	"${HOME}"/crystalfaeries.net/fey.crystalfaeries.net/*			\
				/media/`whoami`/"${uuid}"/fey.crystalfaeries.net			# accumulate .dar backups until manual	intervention
		rsync -auvH	/media/`whoami`/"${uuid}"/fey.crystalfaeries.net/*			\
				"${HOME}"/crystalfaeries.net/fey.crystalfaeries.net			# accumulate .dar backups until auto	 intervention
		chown -R "${usergroup}"						\
				/media/`whoami`/"${uuid}"/fey.crystalfaeries.net			# correct permissions
		chmod 2775	/media/`whoami`/"${uuid}"/fey.crystalfaeries.net			# correct permissions

		# backup with deleting posix (which may have been a symlink)
		if [ -L	/media/`whoami`/"${uuid}"/posix ]
		then
		  rm	/media/`whoami`/"${uuid}"/posix	# clear symlink out of the way
		  mkdir	/media/`whoami`/"${uuid}"/posix	# ensure directory is present
		fi
		rsync	-auvH		/usr/local/{.??,}*				\
			--exclude	games/tor-browser_en-US				\
			--exclude	games/avidemux_2.7.4				\
			/media/`whoami`/"${uuid}"/posix # backup posix

		# backup withOUT deleting all but audio and some tansients:
#		rsync --delete	-auvH							\
		rsync		-auvH							\
			--exclude=audio							\
			--exclude=audio/security_now/					\
			--exclude=documents						\
			--exclude=fey.crystalfaeries.net							\
			--exclude=posix							\
			--exclude=video/security_now/					\
			--exclude=video/flute/flute_fundamentals_hd-wvwrzo2_r_q.mp4	\
			"${HOME}"/crystalfaeries.net/{.??,}*				\
			/media/`whoami`/"${uuid}"

		# create DIRECTORY TREE both on local hard drive and on each removable backup / library "disk".
		for d in $( cat	"${HOME}"/crystalfaeries.net/audio/.crystalfaeries.dirs.audio.txt )
		do
			mkdir -p	"${HOME}"/crystalfaeries.net/"${d}"	/media/celeste/"${uuid}"/"${d}"
		done
		
		# backup and restore AUDIO FILES referenced in website:
		for f in $( cat	"${HOME}"/crystalfaeries.net/audio/.crystalfaeries.files.audio.txt )
		do
		#	BACKUP:
		echo   "rsync -auvH "${HOME}"/crystalfaeries.net/${f}	/media/celeste/"${uuid}"/${f}"
			rsync -auvH "${HOME}"/crystalfaeries.net/"${f}"	/media/celeste/"${uuid}"/"${f}"
		#	RESTORE:
		echo   "rsync -auvH /media/celeste/"${uuid}"/${f}	"${HOME}"/crystalfaeries.net/${f}"
			rsync -auvH /media/celeste/"${uuid}"/"${f}"	"${HOME}"/crystalfaeries.net/"${f}"
		done

		#	KEEP AUDACITY
		find					  "${HOME}"/crystalfaeries.net/audio/audacity/	\
				/media/`whoami`/"${uuid}"/audio/audacity	\
			-type f	\! -links 1	-exec unhardlink {} \;
		rsync -auvH				 
			--exclude=.audacity/.audacity-data/AutoSave			\
			--exclude=.audacity-temp					\
			--exclude=.audacity_temp					\
			--exclude=.audacity-tmp						\
							"${HOME}"/crystalfaeries.net/audio/audacity			\
				/media/`whoami`/"${uuid}"/audio			# backup Audacity from HD to SD
		rsync -auvH
			--exclude=.audacity/.audacity-data/AutoSave			\
			--exclude=.audacity-temp					\
			--exclude=.audacity_temp					\
			--exclude=.audacity-tmp						\
				/media/`whoami`/"${uuid}"/audio/audacity		\
				/home						# backup Audacity from SD to HD
		pushd		/media/`whoami`/"${uuid}"
		for i in {1..$DEDUPE} ; do
			fdedupe -f
		done
		popd
		pushd		/home/`whoami`/crystalfaeries.net/
		for i in {1..$DEDUPE} ; do
			fdedupe -f
		done
		popd
		find					  "${HOME}"/crystalfaeries.net/audio/audacity/	\
				/media/`whoami`/"${uuid}"/audio/audacity/	\
			-type f	\! -links 1	-exec unhardlink {} \;
		find 		/media/`whoami`/"${uuid}"/			\
			-type f -size 0	-exec rm {} \;
		df --full
		rsync -auvH	"${HOME}"/documents	/media/`whoami`/"${uuid}"	# backup documents
		pushd				/media/`whoami`/"${uuid}"/documents/youtube.com
		name_tidy
		popd
		df --full
	fi
	pushd	/media/`whoami`/"${uuid}"
	for i in {1..$DEDUPE} ; do
		echo "fdedupe pass ${i} of ${DEDUPE} passes on ${uuid}"
		fdedupe -f	# de-duplicate the partition
	done
	popd			# re-duplicate the audacity tree
	find			/media/`whoami`/"${uuid}"/audio/audacity/	\
				"${HOME}"/crystalfaeries.net/audio/audacity/	\
		-type f	\! -links 1	-exec unhardlink {} \;
	find 		/media/`whoami`/"${uuid}"/				\
		-type f -size 0	-exec rm {} \;
	df --full		# so, how's it look so far?

	if [	${hd_full}	-ge	$(head -n 1 /etc/restorelimit)	]
	then	# outa space on HD so fdedupe
		echo	"HD is Full."
		pushd		"${HOME}"/crystalfaeries.net/
		for i in {1..$DEDUPE} ; do
			echo "fdedupe pass ${i} of ${DEDUPE} passes on crystalfaeries.net"
			fdedupe -f	# de-duplicate the partition
		done
		popd			# re-duplicate the audacity tree
		find		/media/`whoami`/"${uuid}"/audio/audacity/	\
				"${HOME}"/crystalfaeries.net/audio/audacity/	\
			-type f	\! -links 1	-exec unhardlink {} \;
		df --full

	else	# have space on HD so download to it!
		# now incrementally unbackup audio directories by size
		echo	"Incrementally Retrieving AUDIO directories by size."
		for d in $( find /media/`whoami`/"${uuid}"/audio -mindepth 1 -maxdepth 1 -type d -exec du -s {} \;	| \
			sort -n	| cut -f2- )
		do
			echo	"${d}"
			rsync -auvH	"${d}"	"${HOME}"/crystalfaeries.net/audio
			let hd_full=$(df --full | grep /dev/mapper/fae--vg-home | sed 's/\%.*$// ; s/^.* //')
			echo "hd_full=${hd_full}"
			if [	${hd_full}	-ge	$(head -n 1 /etc/restorelimit)	]
			then
				echo	"HD is Full."
				pushd		"${HOME}"/crystalfaeries.net/
				for i in {1..$DEDUPE} ; do
					echo "fdedupe pass ${i} of ${DEDUPE} passes on crystalfaeries.net"
					fdedupe -f
				done
				popd
				find		/media/`whoami`/"${uuid}"/audio/audacity/	\
						"${HOME}"/crystalfaeries.net/audio/audacity/	\
					-type f	\! -links 1	-exec unhardlink {} \;
				df --full	# and the results are?
				exit	$?
			fi
		done
	fi
	exit	$?
	;;

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

esac
exit	$?
