天天看点

rsync+inotify实现两个文件夹实时同步

rsync本身可以实现文件复制,类似scp但功能更强一些

rsync -avSH 源文件路径 目录路径 可以跨机器,只要ssh能访问

-v, --verbose 详细模式输出,也就是能显示整个复制过程

-a, 归档模式,表示以递归方式传输文件,并保持文件属性,等于-rlptgoD

-b, --backup,创建备份,如果目的地文件夹内存在同明文件,则将老的同名文件重命名为~filename

-H, 保留硬链接(如果有的话)

-S, -sparse 对稀疏文件进行特殊处理以节省DST的空间

-将-n、-v选项合用,可以模拟同步过程,显示需要做哪些操作(但并不真的同步)

–delete 加了这一项,则保持两个文件夹内容完全一样,如果目标目录有多余的文档,则直接删除掉

inotify在光盘yum源里没有,需要自己下载安装

对应的命令是inotifywait,参数有

-m 持续监视文件变化,也就是它会一直盯着源文件夹,如果有变动就会自动同步

-r 递归监视

-q 减少冗余信息的显示,只打印基本信息

-e 指定监听事件

可用来监听的事件:

access: 访问

modify 修改,监听文件内容的修改

attrib 属性,监听文件属性的修改

move 移动,监听到有文件移动

create 新建

delete 删除

例子:

让inotify监听目录a,如果里边内容有变动则同步到目录b,注意如果是跨机器的监听同步,则需要设置源机器对目录机器的ssh无密码登陆

#!/bin/bash

From_dir="/root/a" #源文件

Rsync_cmd=“rsync -a --delete ${From_dir} 192.168.1.100:/root/b” #同步的命令

while inotifywait -rqq -e modify,attrib,move,create,delete ${From_dir} #用循环的方式让它持续监控

do

${Rsync_cmd}

done & #放在后边,让它一直运行

继续阅读