mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-11-04 05:10:07 +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 :
 |