-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsync.sh
More file actions
executable file
·61 lines (50 loc) · 1.33 KB
/
Copy pathsync.sh
File metadata and controls
executable file
·61 lines (50 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/bash
#PATH TO THIS SCRIPT
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )";
#SOURCE CONFIG FILE
. "$SCRIPT_DIR/.config.sh";
#BUILD EXCLUSION STRINGS
FIND_EXCLUDE=();
RSYNC_EXCLUDE="";
for i in "${EXCLUDE[@]}"
do
FIND_EXCLUDE+=("! -path '$i'");
RSYNC_EXCLUDE+=("--exclude='$i'");
done
#BUILD FIND CMD
FIND_CMD="
find $WATCH_DIR
-type f
\(
-newerct '-$POLLING_TIME seconds' -o
-newermt '-$POLLING_TIME seconds'
\)
${FIND_EXCLUDE[@]}";
#BUILD RSYNC CMD
RSYNC_CMD="
rsync
--del
-avz
${RSYNC_EXCLUDE[@]}
-e 'ssh -p$SSH_PORT' $WATCH_DIR/ $SSH_USER@$SSH_HOST:$SSH_DIR
";
#CREATE SERVER DEST PATH IF DOESN'T EXIST
echo "Creating remote dir if doesn't exist";
ssh $SSH_USER@$SSH_HOST -p$SSH_PORT "mkdir -p $SSH_DIR";
#SYNC FILES AS PART OF START UP
echo "Syncing.";
eval $RSYNC_CMD;
#START DAEMON
while [ true ]; do
#GET LIST OF CREATED/MODIFIED FILES
CHANGED_FILES=($(eval $FIND_CMD));
#IF AT LEAST ONE RELEVANT FILE WAS CREATED/MODIFIED, RSYNC
if [ ${#CHANGED_FILES[@]} -gt 0 ]; then
START_TIME=`stat -c %Y ${CHANGED_FILES[0]}`;
echo "${#CHANGED_FILES[@]} file(s) changed. Syncing.";
eval $RSYNC_CMD;
END_TIME=`date +%s`;
echo "Elapsed Time: $((END_TIME-START_TIME)) seconds";
fi
sleep $POLLING_TIME;
done