42tools/sync.sh

44 lines
1.2 KiB
Bash
Executable File

#!/bin/zsh
# vi: et sw=4 ts=4:
# hsv2
LOCAL_DIR="${2:="$HOME/goinfre/"}"
REMOTE_DIR="${3:="$HOME/sgoinfre/goinfre/"}"
ARCHIVE="${4:="$HOME/sgoinfre/goinfre.tar.gz"}"
MARKER=".sync.sh.marker"
LOCAL_MARKER="$LOCAL_DIR/$MARKER"
REMOTE_MARKER="$REMOTE_DIR/$MARKER"
if [[ ! ( -e "$LOCAL_DIR" && -e "$REMOTE_DIR") ]]
then
echo "ABORTING: local or remote directory missing"
exit 1
fi
if [[ ($1 == "in" || -z $1) && (! -e "$LOCAL_MARKER" || "$LOCAL_MARKER" -ot "$REMOTE_MARKER") ]]
then
echo "sync in: $LOCAL_DIR"
if [[ -f "$ARCHIVE" ]]
then
tar xzf "$ARCHIVE" -C "$LOCAL_DIR"
fi
rsync -a --progress "$REMOTE_DIR/" "$LOCAL_DIR"
elif [[ $1 == "out" && (! -e "$REMOTE_MARKER" || "$REMOTE_MARKER" -ot "$LOCAL_DIR") ]]
then
echo "sync out: $REMOTE_DIR"
echo "cleaning brew"
brew autoremove
brew cleanup --prune=all
tar czf "$ARCHIVE.tmp" -C "$LOCAL_DIR" . || (echo "FATAL ERROR. EXITING"; exit 1)
mv -v "$ARCHIVE.tmp" "$ARCHIVE"
rsync -a --progress --delete-delay "$LOCAL_DIR/" "$REMOTE_DIR"
touch "$REMOTE_MARKER"
elif [[ $1 != "in" && $1 != "out" ]]
then
echo -e "parameter invalid\nsyntax: $0 {in|out} [ local [ remote ] ]"
exit 1
fi
echo "Up to date"