snaprep

git mirror of https://ccx.te2000.cz/bzr/snaprep
git clone https://ccx.te2000.cz/git/snaprep
Log | Files | Refs

snap.push.single.zsh (885B)


      1 #!/bin/zsh
      2 die() {
      3 	print -r - "$@"
      4 	exit 1
      5 }
      6 
      7 if [[ -z $SNAP_SRC ]]; then
      8 	SNAP_SRC=$1;shift
      9 fi
     10 SNAP_SRC=${SNAP_SRC%%/}
     11 
     12 if [[ -z $SNAP_DST ]]; then
     13 	SNAP_DST=$1;shift
     14 fi
     15 SNAP_DST=${SNAP_DST%%/}
     16 
     17 rsync=( rsync -aA --delete "$@" )
     18 
     19 marks=( $SNAP_SRC/.snapshot.[0-9]*(N) )
     20 (( $#marks != 1 )) && die invalid marks ${(qqq)marks}
     21 
     22 if [[ $SNAP_DST == *:* ]]; then
     23 	# remote
     24 	[[ $SNAP_DST == *.push ]] || SNAP_DST=$SNAP_DST.push
     25 	$rsync  --exclude=/.snapshot.\* $SNAP_SRC/ $SNAP_DST/ && \
     26 	$rsync  $SNAP_SRC/ $SNAP_DST/
     27 else
     28 	# local
     29 	[[ -d $SNAP_DST ]] || die destination not a directory: ${(qqq)SNAP_DST}
     30 	ts=${marks##*.}
     31 	snapshots=( ${SNAP_DST}/.snapshot.[1-9]*(N) )
     32 	if (($#snapshots)); then
     33 		link=${SNAP_DST}/${${snapshots[-1]}##*.}
     34 		$rsync --link-dest=$link $SNAP_SRC/ $SNAP_DST/$ts/ || exit $?
     35 	else
     36 		$rsync $SNAP_SRC/ $SNAP_DST/$ts/ || exit $?
     37 	fi
     38 	touch ${SNAP_DST}/$marks:t
     39 fi