Skip to content

Instantly share code, notes, and snippets.

@kmfarley11
Created January 18, 2020 21:22
Show Gist options
  • Save kmfarley11/3f23d0392049be1acb4398cca0278c49 to your computer and use it in GitHub Desktop.
Save kmfarley11/3f23d0392049be1acb4398cca0278c49 to your computer and use it in GitHub Desktop.
Simple File Sync Using SCP
#!/bin/bash
# A very simple script (function) to enable file syncing given a server IP running (open)sshd
#
# rsync is probably a better option... but if you cant, ssh/scp is pretty straightforward
#
# to setup (open)sshd on windows 10 refer to https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse
# to setup (open)sshd on linux / mac refer to your package manager (i.e. apt-get install openssh-server)
#
# This script makes a few assumptions, if you just source this file (source do_sync.sh) then execute "do_sync" to see usage
# NOTE: you need to set the following environment variables: SYNC_HOST and SYNC_USER
function do_sync {
# $SYNC_HOST is server to scp with
# $SYNC_USER is user to scp as
# $1 decides (l2s) local to server or (s2l) server to local (bak) bidirectional bakup
echo "using: SYNC_HOST ($SYNC_HOST), SYNC_USER ($SYNC_USER)"
DIRECTION=${1:-invalid}
LOCAL_PATH=${2:-invalid}
SERVER_PATH=${3:-invalid}
LOCAL_HOST=$(cat /etc/hostname)
if [ "$DIRECTION" = "bak" ]; then
echo "backing up server and local files by hostnames"
scp $SYNC_USER@$SYNC_HOST:$SERVER_PATH $LOCAL_PATH.$SYNC_HOST.bak
scp $LOCAL_PATH $SYNC_USER@$SYNC_HOST:$SERVER_PATH.$LOCAL_HOST.bak
cp $LOCAL_PATH $LOCAL_PATH.$LOCAL_HOST.bak
scp $LOCAL_PATH.$SYNC_HOST.bak $SYNC_USER@$SYNC_HOST:$SERVER_PATH.$SYNC_HOST.bak
elif [ "$DIRECTION" = "l2s" ]; then
echo "replacing server with local file"
scp $LOCAL_PATH $SYNC_USER@$SYNC_HOST:$SERVER_PATH
elif [ "$DIRECTION" = "s2l" ]; then
echo "replacing local with server file"
scp $SYNC_USER:$SYNC_HOST:$SERVER_PATH $LOCAL_PATH
else
echo "invalid selection(s): '$DIRECTION', '$LOCAL_PATH', '$SERVER_PATH'"
echo "Usage: do_sync <direction> <local_path> <server_path>"
echo " <direction> = l2s (local to server)"
echo " s2l (server to local)"
echo " bak (bidirectional backup)"
echo " <local_path> = path to local file to sync/backup"
echo " <server_path> = path to server file to sync/backup"
echo ""
echo "SYNC_HOST, SYNC_USER, and LOCAL_HOST can be changed"
echo " export SYNC_USER=<server user to scp as>"
echo " export SYNC_HOST=<desired server>"
echo " export LOCAL_HOST=<local identifier>"
return 1
fi
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment