注:
1、以下为编写脚本前做的测试,用于收集一个操作产生哪些事件,合并一些多余的事件,然后再触发rsync进行同步,减少资源的占用
2、起初的inotifywait参数比正式脚本中要少(因后期修改脚本bug中添加)
========================================================================================
1、对于大文件创建,如果使用create事件创建,会导致文件还没有创建完,就开始传输,所以使用事件close_write(可以捕捉CLOSE_WRITE,CLOSE),例:
/t/1.h CLOSE_WRITE,CLOSE
rsync -ulDtpog -e ssh /tmp/rs/filename 192.168.2.120:/tmp/rs
2、SHELL 下文件重命名,使用事件moved_to(捕捉MOVED_TO),例:
/t/txt00mv MOVED_TO
rsync -ulDtpog -e ssh /tmp/rs/filename 192.168.2.120:/tmp/rs
3、目录的创建,使用create(捕捉CREATE,ISDIR用于和文件创建区分,不递归传输),例:
/t/d1 CREATE,ISDIR
注意:SRC目录名无"/"
rsync -ulDtpog -d -e ssh /tmp/rs/dirname 192.168.2.120:/tmp/rs
4、目录重命名,使用moved_to(捕捉MOVED_TO,ISDIR,递归传输),例:
/t/dir2 MOVED_TO,ISDIR
注意:SRC无"/"
rsync -ulDtpog -r -e ssh /tmp/rs/dirname 192.168.2.120:/tmp/rs
5、文件修改元数据无操作,因为使用cp -af时也会产生很多attrib(虽然需要同步,但是如果存在大文件会出现1种介绍的问题),所以不对文件的元数据变动产生事件相关的操作。
6、目录修改元数据,使用attrib(捕捉/t/b ATTRIB,ISDIR)
/t/b/ ATTRIB,ISDIR
/t/b ATTRIB,ISDIR #可以使用这个事件当作脚本调用的信号
两种情况:
一种是无递归修改:配合rsync使用时不递归,使用-d选项,注意dirname无"/"
rsync -ulDtpog -d -e ssh /tmp/rs/dirname 192.168.2.120:/tmp/rs
另一种是递归修改:注意dirname无"/"
rsync -ulDtpog -r -e ssh /tmp/rs/dirname 192.168.2.120:/tmp/rs
但是如果再对目录是否递归做判断又太繁琐,所以直接使用第二种:
rsync -ulDtpog -r -e ssh /tmp/rs/dirname 192.168.2.120:/tmp/rs
注:未列出的说明已经包含在其中某一操作,产生的事件相同。
7、FTP文件重命名,加个判断吧……
/t/1.txtt CREATE
/t/1.txt DELETE
8、可以使用%Xe,输出事件逗号分割会变为X分隔,使用*作为各项目字段的分割符
/t/sdf CLOSE_WRITE,CLOSE
/t/sdf CLOSE_WRITEXCLOSE
=================================SHELL下的操作事件====================================
START---------(close_write,create,moved_to,attrib,delete)--------------START
操作事件
文件:直接创建/tmp/rs/*f0*CLOSE_WRITEXCLOSE
文件:拷贝其它目录中的文件到当前目录/tmp/rs/*f1*CLOSE_WRITEXCLOSE
文件:拷贝其它目录中的文件到当前目录并重命名/tmp/rs/*f11*CLOSE_WRITEXCLOSE
文件:移动其它目录中的文件到当前目录/tmp/rs/*f2*MOVED_TO
文件:移动其它目录中的文件到当前目录并重命名/tmp/rs/*f33*MOVED_TO
文件:当前目录文件重命名/tmp/rs/*f10*MOVED_TO
文件:拷贝当前目录文件到副本文件/tmp/rs/*f100*CLOSE_WRITEXCLOSE
目录:直接创建/tmp/rs/*d0*CREATEXISDIR
目录:拷贝其它目录中的目录到当前目录/tmp/rs/*d1*CREATEXISDIR
目录:拷贝其它目录中的目录到当前目录并重命名/tmp/rs/*d11*CREATEXISDIR
目录:移动其它目录中的目录到当前目录/tmp/rs/*d2*MOVED_TOXISDIR
目录:移动其它目录中的目录到当前目录并重命名/tmp/rs/*d33*MOVED_TOXISDIR
目录:当前目录中的目录重命名/tmp/rs/*d22*MOVED_TOXISDIR
目录:拷贝当前目录中的目录到副本目录/tmp/rs/*d00*CREATEXISDIR
目录树:直接创建
/tmp/rs/*1*CREATEXISDIR
/tmp/rs/1/*2*CREATEXISDIR
/tmp/rs/1/2/*3*CREATEXISDIR
目录树:移动其它目录中的目录树到当前目录
/tmp/rs/*tree1*MOVED_TOXISDIR
目录树:移动其它目录中的目录树到当前目录并重命名
/tmp/rs/*tree22*MOVED_TOXISDIR
目录树:拷贝其它目录中的目录树到当前目录
/tmp/rs/*tree3*CREATEXISDIR
/tmp/rs/tree3/*2*CREATEXISDIR
/tmp/rs/tree3/2/*3*CREATEXISDIR
目录树:拷贝其它目录中的目录树到当前目录并重命名
/tmp/rs/*tree33*CREATEXISDIR
/tmp/rs/tree33/*2*CREATEXISDIR
/tmp/rs/tree33/2/*3*CREATEXISDIR
目录树:拷贝当前目录中目录树到副本
/tmp/rs/*tree11*CREATEXISDIR
/tmp/rs/tree11/*2*CREATEXISDIR
/tmp/rs/tree11/2/*3*CREATEXISDIR
目录树:目录树顶层目录重命名
/tmp/rs/*tree1bak*MOVED_TOXISDIR
含文件目录树:移动其它目录中含文件目录树到当前目录
/tmp/rs/*tree1*MOVED_TOXISDIR
含文件目录树:移动其它目录中含文件目录树到当前目录并重名目录
/tmp/rs/*tree22*MOVED_TOXISDIR
含文件目录树:拷贝其它目录中含文件目录树到当前目录
/tmp/rs/*tree3*CREATEXISDIR
/tmp/rs/tree3/*1*CREATEXISDIR
/tmp/rs/tree3/1/*1.txt*CLOSE_WRITEXCLOSE
/tmp/rs/tree3/1/*2*CREATEXISDIR
/tmp/rs/tree3/1/2/*2.txt*CLOSE_WRITEXCLOSE
/tmp/rs/tree3/1/2/*3*CREATEXISDIR
/tmp/rs/tree3/1/2/3/*3.txt*CLOSE_WRITEXCLOSE
/tmp/rs/tree3/*tree3.txt*CLOSE_WRITEXCLOSE
含文件目录树:拷贝其它目录中含文件目录树到当前目录并重命名目录
/tmp/rs/*tree33*CREATEXISDIR
/tmp/rs/tree33/*1*CREATEXISDIR
/tmp/rs/tree33/1/*1.txt*CLOSE_WRITEXCLOSE
/tmp/rs/tree33/1/*2*CREATEXISDIR
/tmp/rs/tree33/1/2/*2.txt*CLOSE_WRITEXCLOSE
/tmp/rs/tree33/1/2/*3*CREATEXISDIR
/tmp/rs/tree33/1/2/3/*3.txt*CLOSE_WRITEXCLOSE
/tmp/rs/tree33/*tree3.txt*CLOSE_WRITEXCLOSE
含文件目录树:含文件目录树顶层目录重命名
/tmp/rs/*tree3rename*MOVED_TOXISDIR
含文件目录树:拷贝当前含文件目录树副本到当前目录
/tmp/rs/*tree33.cp*CREATEXISDIR
/tmp/rs/tree33.cp/*1*CREATEXISDIR
/tmp/rs/tree33.cp/1/*1.txt*CLOSE_WRITEXCLOSE
/tmp/rs/tree33.cp/1/*2*CREATEXISDIR
/tmp/rs/tree33.cp/1/2/*2.txt*CLOSE_WRITEXCLOSE
/tmp/rs/tree33.cp/1/2/*3*CREATEXISDIR
/tmp/rs/tree33.cp/1/2/3/*3.txt*CLOSE_WRITEXCLOSE
/tmp/rs/tree33.cp/*tree3.txt*CLOSE_WRITEXCLOSE
END---------(close_write,create,moved_to,attrib,delete)--------------END
START---------(close_write,close_nowrite,create,moved_to,attrib,delete)-------START
文件改权限、属主、属组(改一个文件):
/tmp/rs/*1*ATTRIB
/tmp/rs/**CLOSE_NOWRITE,CLOSE,ISDIR
文件改权限、属主、属组(改多个文件):
/tmp/rs/*2*ATTRIB
/tmp/rs/*3*ATTRIB
/tmp/rs/*4*ATTRIB
/tmp/rs/**CLOSE_NOWRITE,CLOSE,ISDIR
目录改权限、属主、属组(一个或多个相同,脚本执行中对单行和多行执行不一样):
/tmp/rs/*d1*ATTRIBXISDIR
/tmp/rs/*d2*ATTRIBXISDIR
/tmp/rs/*d3*ATTRIBXISDIR
===================================SFTP下的操作事件====================================
SFTP上传文件:/tmp/rs/*1.txt*CLOSE_WRITEXCLOSE
SFTP文件重命名,脚本输出结果:FTP renamed file: 1.tf
SFTP上传空目录:/tmp/rs/*empty*CREATEXISDIR
SFTP目录重命名:/tmp/rs/*empty_bak*MOVED_TOXISDIR
SFTP上传目录树含文件:/tmp/rs/*d1*CREATEXISDIR
/tmp/rs/d1/*d1.txt*CLOSE_WRITEXCLOSE
/tmp/rs/d1/*d2*CREATEXISDIR
/tmp/rs/d1/d2/*d3*CREATEXISDIR
/tmp/rs/d1/d2/*d2.txt*CLOSE_WRITEXCLOSE
/tmp/rs/d1/d2/d3/*d3.txt*CLOSE_WRITEXCLOSE
SFTP改文件权限(改一个文件)直接运行命令结果:
/tmp/rs/*1.tf*ATTRIB
/tmp/rs/**CLOSE_NOWRITE,CLOSE,ISDI
SFTP改文件权限(改多个文件)直接运行命令结果:
/tmp/rs/*3.txt*ATTRIB
/tmp/rs/*2.txt*ATTRIB
/tmp/rs/*1.tf*ATTRIB
/tmp/rs/**CLOSE_NOWRITE,CLOSE,ISDIR
SFTP改目录权限(一个或多个相同):/tmp/rs/*d1*ATTRIBXISDIR
========================FTP下的操作事件(服务端:vsftp)===============================
FTP上传文件:/tmp/rs/*1.txt*CLOSE_WRITEXCLOSE
FTP文件重命名,直接运行脚本中命令:
/tmp/rs/*1.tf*MOVED_TO
/tmp/rs/**CLOSE_NOWRITE,CLOSE,ISDIR
FTP上传空目录:/tmp/rs/*empty*CREATEXISDIR
FTP目录重命名:/tmp/rs/*empty_bak*MOVED_TOXISDIR
FTP上传目录树含文件:
/tmp/rs/*d1*CREATEXISDIR
/tmp/rs/d1/*d2*CREATEXISDIR
/tmp/rs/d1/d2/*d3*CREATEXISDIR
/tmp/rs/d1/d2/d3/*d3.txt*CLOSE_WRITEXCLOSE
/tmp/rs/d1/d2/*d2.txt*CLOSE_WRITEXCLOSE
/tmp/rs/d1/*d1.txt*CLOSE_WRITEXCLOSE
FTP改文件权限(改一个文件)直接运行命令结果:
/tmp/rs/*1.tf*ATTRIB
/tmp/rs/**CLOSE_NOWRITE,CLOSE,ISDI
FTP改文件权限(改多个文件)直接运行命令结果:
/tmp/rs/*3.txt*ATTRIB
/tmp/rs/*2.txt*ATTRIB
/tmp/rs/*1.tf*ATTRIB
/tmp/rs/**CLOSE_NOWRITE,CLOSE,ISDIR
FTP改目录权限(一个或多个相同):/tmp/rs/*d1*ATTRIBXISDIR
END------------(close_write,close_nowrite,create,moved_to,attrib,delete)------------END