# 利用rsync和inotify-tools同步目录

# 同步两个本地文件夹

#!/bin/sh
SRC_DIR=/home/app/test1 # 目录结尾不能带/
DST_DIR=/home/app/test2
inotify_cmd=/usr/bin/inotifywait
exclude_file=/home/app/exclude.txt #忽略同步的目录或文件,可以*temp*通配

cd $SRC_DIR
inotify_args="-mrq --timefmt  '%Y-%m-%dT%H:%M' --format  '%T|%w|%f|%e|' -e modify,delete,create "
$inotify_cmd $inotify_args  $SRC_DIR \
| while read line;

do
	INO_PATH=$(echo $line|awk -F '|' '{print $2}')
	INO_FILE=$(echo $line|awk -F '|' '{print $3}')
	INO_EVENT=$(echo $line|awk -F '|' '{print $4}')
	echo $INO_PATH"-----------";
	echo $INO_FILE"-----------";
	echo $INO_EVENT"-----------";

	base_dir_arr=(${SRC_DIR//\// })
	base_dir_index=$((${#base_dir_arr[*]}+2))

	RE_PATH=$(echo $INO_PATH|cut -d '/' -f $base_dir_index-)
	if [[ $INO_EVENT = 'CREATE' ]] || [[ $INO_EVENT = 'MODIFY' ]] || [[ $INO_EVENT = 'CLOSE_WRITE' ]] || [[ $INO_EVENT = 'MOVE' ]] || [[ $INO_EVENT == 'CREATE,ISDIR' ]] ; then
		sleep 1
		if [ ! -d $DST_DIR/$RE_PATH ]; then
			mkdir $DST_DIR/$RE_PATH
		fi
		echo $RE_PATH
		echo "rsync -vzrtopg --progress  $INO_PATH$INO_FILE  --exclude-from=$exclude_file $DST_DIR/$RE_PATH  "
		rsync -vzrtopg --progress  $INO_PATH$INO_FILE  --exclude-from=$exclude_file $DST_DIR/$RE_PATH  
	
	fi
	
	 
#	rsync -avz --delete $SRC_DIR $DST_DIR 2>&1
done

cd -

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

# 同步本地到远程服务器上

需要配置ssh免密登录到服务器上

#!/bin/sh
SRC_DIR=/usr/local/openresty/nginx
DST_DIR=/usr/local/openresty/nginx
exclude_file=/home/app/exclude.txt #忽略同步的目录或文件,可以*temp*通配

inotify_cmd=/usr/bin/inotifywait
cd $SRC_DIR
inotify_args="-mrq --timefmt  '%Y-%m-%dT%H:%M' --format  '%T|%w|%f|%e|' -e modify,delete,create "
$inotify_cmd $inotify_args  $SRC_DIR \
| while read line;

do
	INO_PATH=$(echo $line|awk -F '|' '{print $2}')
	INO_FILE=$(echo $line|awk -F '|' '{print $3}')
	INO_EVENT=$(echo $line|awk -F '|' '{print $4}')
	echo $INO_FILE"-----------";
	echo $INO_EVENT"-----------";
	echo $INO_PATH"-----------";
    base_dir_arr=(${SRC_DIR//\// })
	base_dir_index=$((${#base_dir_arr[*]}+2))
	RE_PATH=$(echo $INO_PATH|cut -d '/' -f $base_dir_index-)
	if [[ $INO_EVENT = 'CREATE' ]] || [[ $INO_EVENT = 'MODIFY' ]] || [[ $INO_EVENT = 'CLOSE_WRITE' ]] || [[ $INO_EVENT = 'MOVE' ]]  || [[ $INO_EVENT == 'CREATE,ISDIR' ]] ; then
		sleep 1
		echo "rsync -vzrtopg --progress  $INO_PATH$INO_FILE  --exclude-from=$exclude_file app@10.10.73.21:$DST_DIR/$RE_PATH  "
		rsync -vzrtopgu --progress  $INO_PATH$INO_FILE  --exclude-from=$exclude_file app@10.10.73.21:$DST_DIR/$RE_PATH  
	fi
	
	 
#	rsync -avz --delete $SRC_DIR $DST_DIR 2>&1
done

cd -

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