#!/bin/sh
srcdir=/syncdir/
dstdir=s230
dstip='172.2.1.230'
dstuser='root'


while true; do
inotifywait -rq -e modify,create,move,delete,attrib --timefmt '%Y-%m-%d %H:%M:%S' --format '%w%f:%e:%T' $srcdir --exclude=".*.swp" | while read file
do
sleep 5

rsync -avuz --port=212 --progress --delete $srcdir -e 'ssh -p 1012' $dstuser@$dstip::$dstdir > /tmp/main.log


sleep 5
done
done


为了实现一批文件只同步一次的目的,inotifywait命令行中不能添加-m参数
命令参数解析
-h | --help:打印帮助信息
--exclude <pattern>:排除所有匹配正则表达式pattern的文件监控事件
--excludei <patter>:排除所有匹配正则表达式pattern(忽略大小写)的文件监控事件
-m | --monitor:加上这个参数inotifywait会持续监听文件变化。如果不加这个参数,命令会在监控到第一个事件的时候退出
-d | --daemon:在后台运行,其他行为和-m参数一致。日志输出需要使用-o或--outfile指定
-r | --recursive:递归监听所有的目录
--fromfile <file>:从file中读取需要监听的文件列表。file中一行写一个监听目录,需要排除的行使用@开头
-o | --outpfile:输出到文件而不是默认的stdout
-s | --syslog:发送错误到syslog而不是stderr
-q | --quiet:减少打印输出,仅打印监听事件
-qq:什么都不打印(事件也不打印)
--format:自定义格式化输出,参数含义后面说明
--timefmt:使用strftime定义时间格式。在--format中使用%T打印时间
-c | --csv:打印事件为csv格式
-t | --timeout <seconds>:监听单次事件时候的超时时间,如果设置为0永不超时
-e | --event:监听指定的事件类型,如果省略,监听所有类型的事件
可以监听的事件列表:

access:读取内容
modify:修改
attrib:属性修改
close_write:以writable mode打开后关闭
close_nowrite:以read-only mode打开后关闭
close:关闭(无论是可写模式打开还是只读模式打开)
open:打开
moved_to:有文件或目录移动到了监听的目录
moved_from:有文件或目录从监听的目录移出
move:包含moved_to和moved_from
create:创建
delete:删除(监听的目录内)
delete_self:监听的文件或目录本身被删除
umount:发生了umount事件
--format参数格式的指定方式:

-w:事件对应的文件所在目录
-f:事件对应的文件名
-e: 事件类型,使用逗号分隔
-Xe:事件类型,使用X字符分隔,在实际使用时把字符X替换为分隔符
%T:事件发生的时间,格式在--timefmt中指定




ssh-keygen
提示:当提示输入密码时,只需输入两次回车键,不指配密码字符。
在/root/.ssh/生成公私和私钥
使用ssh-copy-id将公匙拷贝至远程主机
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.200.10

现在,你可以不需要密码就可以ssh连接到远程主机
ssh 192.168.200.10


https://www.jb51.net/article/60192.htm