mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-31 11:20:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			109 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/bash
 | |
| 
 | |
| # XXX need:
 | |
| # 	- protocol (command) to create archive root
 | |
| # 		manually:
 | |
| # 			- copy tree
 | |
| # 			- run snapshot.sh
 | |
| # 		script:
 | |
| # 			XXX
 | |
| # 	- protocol to create snapshots
 | |
| # 		- sync-flash.sh ???
 | |
| # 	- protocol to restore stuff -- simply copy???
 | |
| # 	- protocol to fully delete something -- i.e. delete snapshots???
 | |
| # 	- a way to list deleted files
 | |
| # 	- a way to list available file versions
 | |
| # 	- a way to restore specicifc file(s)
 | |
| # 	- a way to maintain a set number of snapshots...
 | |
| #
 | |
| 
 | |
| usage(){
 | |
| 	echo "Usage:"
 | |
| 	# XXX
 | |
| 	echo "    $(basename "$0")"
 | |
| }
 | |
| printHelp(){
 | |
| 	usage
 | |
| 	# XXX
 | |
| }
 | |
| 
 | |
| # handle args...
 | |
| for arg in "$@" ; do
 | |
| 	case $arg in
 | |
| 		-h|--help)
 | |
| 			printHelp
 | |
| 			exit
 | |
| 			;;
 | |
| 	esac
 | |
| done
 | |
| 
 | |
| 
 | |
| SNAPSHOT_DIR=.snapshots
 | |
| SUBVOLUME_DIR=media
 | |
| SNAPSHOT_COUNT=5
 | |
| 
 | |
| 
 | |
| # run in script dir (not cwd)...
 | |
| DIR=`dirname "$0"`
 | |
| if ! [ -z "$DIR" ] ; then
 | |
| 	cd "$DIR"
 | |
| fi
 | |
| 
 | |
| # check if on btrfs filesystem...
 | |
| # XXX also check if btrfs command is available...
 | |
| if ! btrfs filesystem usage . > /dev/null 2>&1 ; then
 | |
| 	exit
 | |
| fi
 | |
| 
 | |
| 
 | |
| 
 | |
| # create ./media...
 | |
| # XXX check if not a directory...
 | |
| if ! [ -e "$SUBVOLUME_DIR" ] ; then
 | |
| 	btrfs subvolume create "$SUBVOLUME_DIR"
 | |
| 	# XXX build tree -- ImageGrid
 | |
| 
 | |
| # convert ./media to a subvolume...
 | |
| elif ! [ "$(stat --format=%i "$SUBVOLUME_DIR")" == 256 ] ; then
 | |
| 	mkdir bak
 | |
| 	mv "$SUBVOLUME_DIR" bak/
 | |
| 	btrfs subvolume create "$SUBVOLUME_DIR"
 | |
| 	cp --archive --one-file-system --reflink=always \
 | |
| 		./bak/"$SUBVOLUME_DIR"/{,.}* \
 | |
| 		"$SUBVOLUME_DIR"/
 | |
| fi
 | |
| mkdir -p "$SNAPSHOT_DIR"
 | |
| 
 | |
| 
 | |
| # XXX should this be more human readable???
 | |
| # 	...a date + number maybe???
 | |
| SNAPSHOT=$(( 
 | |
| 	$( ls "$SNAPSHOT_DIR/" \
 | |
| 		| sort -n \
 | |
| 		| tail -n 1 ) \
 | |
| 	+ 1 ))
 | |
| 
 | |
| #btrfs subvolume snapshot -r "$SUBVOLUME_DIR" "${SNAPSHOT_DIR}/${SNAPSHOT}"
 | |
| btrfs subvolume snapshot "$SUBVOLUME_DIR" "${SNAPSHOT_DIR}/${SNAPSHOT}"
 | |
| 
 | |
| 
 | |
| if [[ $SNAPSHOT_COUNT =~ [0-9]* ]] \
 | |
| 		&& [ "$SNAPSHOT_COUNT" != 0 ] ; then
 | |
| 	SNAPSHOTS=($(\
 | |
| 		ls "$SNAPSHOT_DIR/" \
 | |
| 			| sort -n ))
 | |
| 	remove=$(( ${#SNAPSHOTS[@]} - $SNAPSHOT_COUNT - 1 ))
 | |
| 	while (( $remove >= 0 )) ; do
 | |
| 		# XXX can we avoid sudo here???
 | |
| 		# XXX is 'btrfs subvolume delete ...' the same as 'rm -rf ..'
 | |
| 		#sudo btrfs subvolume delete -c ${SNAPSHOT_DIR}/${SNAPSHOTS[$remove]}
 | |
| 		echo Removing snapshot: ${SNAPSHOT_DIR}/${SNAPSHOTS[$remove]}
 | |
| 		rm -rf ${SNAPSHOT_DIR}/${SNAPSHOTS[$remove]}
 | |
| 		remove=$(( $remove - 1 ))
 | |
| 	done
 | |
| fi
 | |
| 
 | |
| 
 | |
| 
 | |
| # vim:set nowrap nospell :
 |