inotifywait+rsync 实时同步脚本

利用 inotifywait 对文件系统事件实时监控, 触发事件调用 rsync 远程同步文件至一台或多台服务器

同步指定目录 (缺点: 每次触发都要扫描整个目录进行文件差异对比, 文件越多越耗时长)

#!/bin/bash

user=root
ip=192.168.0.2
source=/data/
target=/data/
log_path=/var/log/inotifywait.log

inotifywait -mrq ${source} --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f %e' -e create,modify,attrib,move,delete,close_write |
while read files; do
    echo "$files" >> ${log_path}
    INO_EVENT=$(echo $files | awk '{print $5}')
    # 增改查类型
    if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] || [[ $INO_EVENT =~ 'ATTRIB' ]]
    then
        rsync -avzc ${source} ${user}@${ip}:${target}
    fi
    # 删除&移出事件
    if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
    then
        rsync -avz --delete ${source} ${user}@${ip}:${target}
    fi
done

针对性同步, 同步只针对发生改变的文件的目录
ps: 多级目录下, 移动文件或文件夹到上一级目录不会实时同步, 求解决方案

#!/bin/bash

user=root
ip=192.168.0.2
source=/data/
target=/data/
log_path=/var/log/inotifywait.log

inotifywait -mrq ${source} --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f %e' -e create,modify,attrib,move,delete,close_write |
while read files; do
    echo "$files" >> ${log_path}
    INO_EVENT=$(echo $files | awk '{print $5}')
    INO_PATH=$(echo $files | awk '{print $3}')
    # 增改查类型
    if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] || [[ $INO_EVENT =~ 'ATTRIB' ]]
    then
        # 同步只针对发生改变的文件的目录
        rsync -avzcR ${INO_PATH} ${user}@${ip}:${target}
    fi
    # 删除&移出事件
    if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
    then
        rsync -avzR --delete ${INO_PATH} ${user}@${ip}:${target}
    fi
done





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值