| 
									
										
										
										
											2014-05-26 13:40:18 +04:00
										 |  |  | #!/bin/bash
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-04 06:49:33 +03:00
										 |  |  | VERSION=1.0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-26 13:40:18 +04:00
										 |  |  | DATE=`date +%Y%m%d` | 
					
						
							|  |  |  | COUNT=1 | 
					
						
							| 
									
										
										
										
											2014-06-24 00:27:49 +04:00
										 |  |  | TITLE="" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | RSYNC=rsync | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | #RSYNCFLAGS="-arptgoA --info=progress2,flist --human-readable" | 
					
						
							|  |  |  | RSYNCFLAGS="-arpt --info=progress2,flist --human-readable" | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | CP=cp | 
					
						
							|  |  |  | CPFLAGS=-Rpfv | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # override default... | 
					
						
							|  |  |  | COPY=$RSYNC | 
					
						
							|  |  |  | COPYFLAGS=$RSYNCFLAGS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | COMPRESSOR=./compress-archive.sh | 
					
						
							|  |  |  | COMPRESS=1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-04 05:38:15 +03:00
										 |  |  | # Config file to contain all the default settings... | 
					
						
							|  |  |  | # XXX not sure if this is a good idea... | 
					
						
							| 
									
										
										
										
											2020-01-04 06:49:33 +03:00
										 |  |  | #	...should we also check file sec? | 
					
						
							|  |  |  | ##CONFIG=.sync-flash.rc | 
					
						
							|  |  |  | ##if ! [ -z $CONFIG ] && [ -e ~/$CONFIG ] ; then | 
					
						
							| 
									
										
										
										
											2020-01-05 23:37:49 +03:00
										 |  |  | ##	# XXX executing an external file... | 
					
						
							| 
									
										
										
										
											2020-01-04 06:49:33 +03:00
										 |  |  | ##	source ~/$CONFIG | 
					
						
							| 
									
										
										
										
											2020-01-04 05:38:15 +03:00
										 |  |  | ##fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-28 16:08:18 +03:00
										 |  |  | # base mount dir... | 
					
						
							|  |  |  | # systems with /mnt | 
					
						
							|  |  |  | if [ -d /mnt ] ; then | 
					
						
							|  |  |  | 	BASE=/mnt | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # raw Cygwin | 
					
						
							|  |  |  | elif [ -d /cygdrive ] ; then | 
					
						
							|  |  |  | 	BASE=/cygdrive | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # OSX | 
					
						
							|  |  |  | elif [ -d /Volumes ] ; then | 
					
						
							|  |  |  | 	BASE=/Volumes | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-02 18:56:28 +04:00
										 |  |  | while true ; do | 
					
						
							|  |  |  | 	case "$1" in | 
					
						
							|  |  |  | 		-h|-help|--help) | 
					
						
							|  |  |  | 			echo "usage: `basename $0` FLAGS DRIVE [TITLE]" | 
					
						
							|  |  |  | 			echo | 
					
						
							|  |  |  | 			echo "	-h|-help	print this message and exit." | 
					
						
							|  |  |  | 			echo "	-m|-multi	single base, multiple sub dirs" | 
					
						
							|  |  |  | 			echo "			for multiple flash cards in a" | 
					
						
							|  |  |  | 			echo "			single shoot." | 
					
						
							|  |  |  | 			echo "	-l|-last	last flash card in set, run" | 
					
						
							|  |  |  | 			echo "			process-archive.sh after copying." | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | 			echo "	-b|-base BASE	the base dir to look for drives in" | 
					
						
							| 
									
										
										
										
											2015-04-28 16:08:18 +03:00
										 |  |  | 			echo "			default: $BASE" | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | 			echo "	--rsync		use rsync (default)" | 
					
						
							|  |  |  | 			echo "	--cp		use cp" | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | 			if ! [ -z $COMPRESSOR ] ; then | 
					
						
							|  |  |  | 				echo "	--compress	toggle archive compression" | 
					
						
							|  |  |  | 				echo "			default: `[[ $COMPRESS ]] && echo "on" || echo "off"`" | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 			# notes... | 
					
						
							|  |  |  | 			echo | 
					
						
							|  |  |  | 			if ! [ -z $COMPRESSOR ] ; then | 
					
						
							|  |  |  | 				echo "NOTE: the index is fully usable during the compression stage" | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 			echo "NOTE: cp under Cygwin may messup permissions, use rsync." | 
					
						
							| 
									
										
										
										
											2014-08-02 18:56:28 +04:00
										 |  |  | 			echo | 
					
						
							|  |  |  | 			exit | 
					
						
							|  |  |  | 			;; | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		-i|--interactive) | 
					
						
							|  |  |  | 			INTERACTIVE=1 | 
					
						
							|  |  |  | 			shift | 
					
						
							|  |  |  | 			;; | 
					
						
							| 
									
										
										
										
											2014-08-02 18:56:28 +04:00
										 |  |  | 		-m|-multi|--multi) | 
					
						
							|  |  |  | 			MULTI=1 | 
					
						
							|  |  |  | 			shift | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 		-l|-last|--last) | 
					
						
							|  |  |  | 			LAST=1 | 
					
						
							|  |  |  | 			shift | 
					
						
							|  |  |  | 			;; | 
					
						
							| 
									
										
										
										
											2015-04-28 16:08:18 +03:00
										 |  |  | 		-b|-base|--base) | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | 			BASE=$2 | 
					
						
							|  |  |  | 			shift 2 | 
					
						
							| 
									
										
										
										
											2015-04-28 16:08:18 +03:00
										 |  |  | 			;; | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | 		-cp|--cp) | 
					
						
							|  |  |  | 			COPY=cp | 
					
						
							|  |  |  | 			COPYFLAGS=-Rpfv | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | 			shift | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | 			break | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 		-rsync|--rsync) | 
					
						
							|  |  |  | 			COPY=$RSYNC | 
					
						
							|  |  |  | 			COPYFLAGS=$RSYNCFLAGS | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | 			shift | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 		-compress|--compress) | 
					
						
							|  |  |  | 			COMPRESS=`[[ $COMPRESS ]] && echo "" || echo 1` | 
					
						
							|  |  |  | 			shift | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | 			break | 
					
						
							|  |  |  | 			;; | 
					
						
							| 
									
										
										
										
											2014-08-02 18:56:28 +04:00
										 |  |  | 		*) | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 	esac | 
					
						
							|  |  |  | done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if ! [ -z "$2" ] ; then | 
					
						
							| 
									
										
										
										
											2014-06-24 00:27:49 +04:00
										 |  |  | 	TITLE=" - $2" | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2014-05-26 13:40:18 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | DRIVE=${1} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | while true ; do | 
					
						
							|  |  |  | 	if [[ $INTERACTIVE || ! $DRIVE ]] ; then | 
					
						
							|  |  |  | 		INTERACTIVE=1 | 
					
						
							|  |  |  | 		echo "Select/toggle an option:" | 
					
						
							|  |  |  | 		echo "0) Multi flash card mode is `[[ $MULTI ]] && echo "on" || echo "off"`" | 
					
						
							|  |  |  | 		echo "1) Directoy description is: \"$TITLE\"." | 
					
						
							|  |  |  | 		if [[ ! $DRIVE ]] ; then | 
					
						
							| 
									
										
										
										
											2015-04-28 16:08:18 +03:00
										 |  |  | 			echo "a-z|name) type a drive letter or mount name in $BASE and start." | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 		else | 
					
						
							| 
									
										
										
										
											2015-04-28 16:08:18 +03:00
										 |  |  | 			echo "a-z|name) type a drive letter or mount name in $BASE and start." | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 			echo "Enter) copy drive ${DRIVE}" | 
					
						
							|  |  |  | 		fi | 
					
						
							|  |  |  | 		echo "2) build." | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | 		if ! [ -z $COMPRESSOR ] ; then | 
					
						
							|  |  |  | 			echo "3) compresion is `[[ $COMPRESS ]] && echo "on" || echo "off"`" | 
					
						
							|  |  |  | 			echo "4) quit." | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			echo "3) quit." | 
					
						
							|  |  |  | 		fi | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 		read -p ": " RES | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 		case $RES in | 
					
						
							|  |  |  | 			# toggle multi mode... | 
					
						
							|  |  |  | 			0) | 
					
						
							|  |  |  | 				MULTI=`[[ ! $MULTI ]] && echo 1 || echo ""` | 
					
						
							|  |  |  | 				continue | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 			1) | 
					
						
							|  |  |  | 				read -p "new description: " TITLE | 
					
						
							|  |  |  | 				TITLE=" - $TITLE" | 
					
						
							|  |  |  | 				continue | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 			# continue with same drive or ask again... | 
					
						
							|  |  |  | 			"") | 
					
						
							|  |  |  | 				if [[ ! $DRIVE ]] ; then | 
					
						
							|  |  |  | 					echo "ERR: need a drive to copy from, no defaults." | 
					
						
							|  |  |  | 					echo | 
					
						
							|  |  |  | 					continue | 
					
						
							|  |  |  | 				fi | 
					
						
							|  |  |  | 				DRIVE=$DRIVE | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 			2) | 
					
						
							|  |  |  | 				LAST=1 | 
					
						
							|  |  |  | 				break | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 			3) | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | 				if ! [ -z $COMPRESSOR ] ; then | 
					
						
							|  |  |  | 					COMPRESS=`[[ ! $COMPRESS ]] && echo 1 || echo ""` | 
					
						
							|  |  |  | 				else | 
					
						
							|  |  |  | 					exit | 
					
						
							|  |  |  | 				fi | 
					
						
							|  |  |  | 				continue | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 			4) | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 				exit | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			# new drive letter... | 
					
						
							|  |  |  | 			*) | 
					
						
							|  |  |  | 				DRIVE=$RES | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 		esac | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | 	# sanity check... | 
					
						
							|  |  |  | 	if ! [ -e "${BASE}/${DRIVE}" ] ; then | 
					
						
							|  |  |  | 		echo | 
					
						
							|  |  |  | 		echo "ERR: ${BASE}/${DRIVE}: does not exist, nothing to copy." | 
					
						
							|  |  |  | 		echo | 
					
						
							|  |  |  | 		if [[ $INTERACTIVE || ! $DRIVE ]] ; then | 
					
						
							|  |  |  | 			continue | 
					
						
							|  |  |  | 		fi | 
					
						
							|  |  |  | 		exit | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 	# XXX do a real three digit count... | 
					
						
							|  |  |  | 	# single flash card... | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | 	SCOUNT=`printf "%03d" $COUNT` | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 	if [ -z $MULTI ] ; then | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | 		DIR="${DATE}.${SCOUNT}${TITLE}" | 
					
						
							|  |  |  | 		while [ -e *"$DIR"* ] ; do | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 			COUNT=$((COUNT+1)) | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | 			SCOUNT=`printf "%03d" $COUNT` | 
					
						
							|  |  |  | 			DIR="${DATE}.${SCOUNT}${TITLE}" | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 		done | 
					
						
							|  |  |  | 		BASE_DIR=$DIR | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	# multiple flash cards shoot... | 
					
						
							|  |  |  | 	else | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | 		BASE_DIR="${DATE}${TITLE}/" | 
					
						
							|  |  |  | 		DIR="${BASE_DIR}/${DATE}.${SCOUNT}" | 
					
						
							|  |  |  | 		while [ -e *"$DIR"* ] ; do | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 			COUNT=$((COUNT+1)) | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | 			SCOUNT=`printf "%03d" $COUNT` | 
					
						
							|  |  |  | 			DIR="${BASE_DIR}/${DATE}.${SCOUNT}" | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 		done | 
					
						
							|  |  |  | 	fi | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | 	# normalize paths... | 
					
						
							|  |  |  | 	BASE_DIR="./- ${BASE_DIR}/" | 
					
						
							|  |  |  | 	DIR="./- $DIR/" | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	mkdir -vp "$DIR" | 
					
						
							| 
									
										
										
										
											2014-05-26 13:40:18 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-27 21:03:22 +03:00
										 |  |  | 	echo "Copying files from ${BASE}/${DRIVE} (`du -hs "${BASE}/${DRIVE}" | cut -f 1`)..." | 
					
						
							| 
									
										
										
										
											2019-03-28 02:16:33 +03:00
										 |  |  | 	$COPY $COPYFLAGS ${BASE}/${DRIVE}/* "$DIR" | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 	echo "Copying files: done." | 
					
						
							| 
									
										
										
										
											2014-05-26 13:40:18 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 	# exit interactive mode... | 
					
						
							| 
									
										
										
										
											2014-08-09 01:42:03 +04:00
										 |  |  | 	if [[ ! $MULTI || ! $INTERACTIVE || $LAST ]] ; then | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 		break | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | done | 
					
						
							| 
									
										
										
										
											2014-05-26 13:40:18 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | if [[ $LAST ]] ; then | 
					
						
							|  |  |  | 	COMMON_FLAG=-c | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2014-05-26 13:40:18 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-02 18:56:28 +04:00
										 |  |  | if [[ ! $MULTI || $LAST ]] ; then | 
					
						
							|  |  |  | 	echo "Building archive..." | 
					
						
							|  |  |  | 	./process-archive.sh $COMMON_FLAG "$BASE_DIR" | 
					
						
							|  |  |  | 	echo "Building archive: done." | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | if [[ $COMPRESS ]] ; then | 
					
						
							|  |  |  | 	echo "Compressing archive..." | 
					
						
							|  |  |  | 	${COMPRESSOR} "$BASE_DIR" | 
					
						
							|  |  |  | 	echo "Compressing archive: done." | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2014-08-05 04:24:50 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-27 21:03:22 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | echo "`basename "$0"`: done." | 
					
						
							| 
									
										
										
										
											2019-09-27 21:03:22 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-27 22:18:59 +03:00
										 |  |  | # vim:set nowrap : |