#!/bin/sh printusage() { echo "Usage: $0 [ ...] (repos: all,`echo $repos | tr ' ' ','`) [up|down]" && exit; } repos="docs sites patches" oper=`echo $@ | sed 's/.* //'` # Get last argument ([ -z $2 ] || ([ "$oper" != "up" ] && [ "$oper" != "down" ])) && printusage # rync options #fix this too ropts="--archive --partial --progress --recursive --update --verbose" # Equivalent to: -aPrvu --delete rdest="tjkrsync@tjkeller.xyz:" # Colors BOLD="\033[1m" NORM="\033[0m" CYN="\033[0;36m" RED="\033[0;31m" GRN="\033[0;32m" printsyncmsg() { echo -n "$CYN[Syncing $SYNCNAME...]$NORM\n"; } printsuccess() { echo -n "$BOLD$GRN[Successfully synced $SYNCNAME]\n"; } printerror() { echo -n "$BOLD$RED[An error occured while syncing $SYNCNAME]\n"; } sync() { [ $oper = "up" ] && SYNCNAME="$1$2 to $rdest$2" || SYNCNAME="$rdest$2 to $1$2" printsyncmsg (if [ $oper = "up" ]; then rsync $ropts $1$2 $rdest; else rsync $ropts --delete $rdest$2 $1; fi) \ && printsuccess || printerror } # arg1 = options + containing directory path, arg2 = file/directory name syncdocs() { destdir="" && sync "/home/timmy/" "docs"; } #syncsites() { destdir="" && sync "--exclude=pass /home/timmy/.local/src/" "sites"; } # Excludes password file syncpatches() { destdir="" && sync "--exclude=.git /home/timmy/.local/src/programs/" "patches"; } # Excludes git files syncsite() { destdir="/var/www/tjkeller/" && sync "/home/timmy/.local/src/sites/" "tjkeller"; } for arg in "$@"; do case $arg in all) $0 $repos $oper ;; up|down) oper=$arg ;; *) # Would like to use something like $repos) here but cant for repo in $repos; do [ "$arg" = "$repo" ] && sync$arg && break done || printusage ;; esac done