Skip to content

Instantly share code, notes, and snippets.

@serverwentdown
Created October 12, 2014 14:17
Show Gist options
  • Save serverwentdown/25d840993b710c5dce30 to your computer and use it in GitHub Desktop.
Save serverwentdown/25d840993b710c5dce30 to your computer and use it in GitHub Desktop.
keep your $HOME in sync
#!/bin/zsh
# CONFIG
SERVER="example.com"
# Don't put trailing slashes btw.
REMOTEDIRECTORY="" # Set to "backup" to push to home directory of remote user. WARNING: Beginning with "/" will push to the remote root directory.
LOCALDIRECTORY="$HOME"
# REMOTEUSER="ambrosechua"
LOG=".homesync.log"
HIDDENFILES=".oh-my-zsh .minecraft .irssi"
# END CONFIG
REMOTEPREFIX="$USER@$SERVER:$REMOTEDIRECTORY"
LOCALPREFIX="$LOCALDIRECTORY"
FILES="$(ls -m $LOCALPREFIX | sed 's/\ /\\/g' | sed 's/\,\\/\ /g') $HIDDENFILES $LOG"
FILES="$(echo $FILES | sed 's/\ /:/g' | sed 's/\\/\ /g' )"
FILES=("${(s/:/)FILES}")
echo >> "$LOG"
echo "$(date): Sync triggered" >> "$LOG"
echo "Checking for connectivity to $SERVER"
ssh "$USER@$SERVER" cat /proc/cpuinfo > /dev/null 2>&1
STATUS=$?
if [[ $STATUS -eq 0 ]]; then
echo "$(date): $SERVER is up" >> "$LOG"
echo "$SERVER is up! "
echo
echo "Files to sync: "
echo
echo $FILES
echo
echo "Syncing from $LOCALPREFIX to $REMOTEPREFIX"
echo
echo -n "Starting sync in 5..."
sleep 1
echo -n "4..."
sleep 1
echo -n "3..."
sleep 1
echo -n "2..."
sleep 1
echo -n "1..."
sleep 1
echo
echo "$(date): Starting sync" >> "$LOG"
for f in $FILES; do
echo "Syncing $f"
echo "$(date): Syncing $f" >> "$LOG"
rsync -aHxu --numeric-ids --delete --progress -e "ssh -T -c arcfour -o Compression=no -x" $LOCALPREFIX/$f $REMOTEPREFIX$f # > /dev/stdout >> "$LOG"
echo "Synced $f"
echo "$(date): Synced $f" >> "$LOG"
done;
# CUSTOM
echo "Syncing /Applications"
echo "$(date): Syncing /Applications to Applications/root" >> "$LOG"
rsync -aHxu --numeric-ids --delete --progress -e "ssh -T -c arcfour -o Compression=no -x" /Applications ambrosechua@example.com:Applications/root
echo "Synced /Applications"
echo "$(date): Synced /Applications to Applications/root" >> "$LOG"
echo "Sync complete! "
echo "$(date): Sync complete" >> "$LOG"
echo >> "$LOG"
else;
echo "$(date): $SERVER is unreachable" >> "$LOG"
echo "$SERVER is unreachable. "
fi;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment