This commit is contained in:
85
File/Shell/rsync_inotify.sh
Normal file
85
File/Shell/rsync_inotify.sh
Normal file
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
|
||||
#############################################################################################
|
||||
# 用途: inotify 同步脚本
|
||||
# 作者: 丁辉
|
||||
# 更新时间: 2024-03-28
|
||||
#############################################################################################
|
||||
|
||||
# rsync 服务端 IP
|
||||
HOST=none
|
||||
# rsync 用户名
|
||||
USER=rsync
|
||||
# rsync 密码文件
|
||||
PASSWORD=/etc/rsync.pass
|
||||
# 同步目录
|
||||
SRC=/data/
|
||||
# rsync 模块
|
||||
Module=data
|
||||
# inotifywait 命令
|
||||
inotifywait=/usr/bin/inotifywait
|
||||
|
||||
#### Inotifywait 参数解释
|
||||
# -m: 监控目录
|
||||
# -r: 递归监控
|
||||
# -q: 静默模式
|
||||
# --timefmt: 时间格式
|
||||
# %Y: 年
|
||||
# %m: 月
|
||||
# %d: 日
|
||||
# %H: 时
|
||||
# %M: 分
|
||||
# --format: 输出格式
|
||||
# %T: 时间
|
||||
# %w: 目录
|
||||
# %f: 文件
|
||||
# %e: 事件
|
||||
# %Xe: 扩展事件
|
||||
# -e: 监控事件
|
||||
# modify: 文件内容修改
|
||||
# delete: 文件删除
|
||||
# create: 文件创建
|
||||
# attrib: 文件属性修改
|
||||
# move: 文件移动
|
||||
# close_write: 文件关闭写入
|
||||
|
||||
##### Rsync 参数解释
|
||||
# -a: 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
|
||||
# -r: 相对路径传输文件
|
||||
# -t: 保持文件时间信息
|
||||
# -u: 仅传输更新文件
|
||||
# -z: 传输时压缩
|
||||
# -v: 详细模式输出
|
||||
# -c: 跳过校验算法,仅根据文件时间和大小判断是否同步
|
||||
# -P: 保持文件传输进度
|
||||
|
||||
# 监控目录
|
||||
cd $SRC
|
||||
|
||||
$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f %Xe' -e modify,delete,create,attrib,move,close_write ./ \
|
||||
| while read files ;do
|
||||
# 获取文件路径
|
||||
FILE_PWD=$(echo $files | awk '{print $3}')
|
||||
# 获取文件事件
|
||||
FILE_EVENT=$(echo $files | awk '{print $4}')
|
||||
# 在日志内提示时间
|
||||
echo ".....................................$(date)....................................."
|
||||
|
||||
# 增加、修改、写入完成、移动进事件
|
||||
if [[ $FILE_EVENT =~ "CREATE" ]] || [[ $FILE_EVENT =~ "MODIFY" ]] || [[ $FILE_EVENT =~ "CLOSE_WRITE" ]] || [[ $FILE_EVENT =~ "MOVED_TO" ]]; then
|
||||
rsync -artuz --password-file=${PASSWORD} $(dirname ${FILE_PWD}) ${USER}@${HOST}::${Module}
|
||||
fi
|
||||
|
||||
# 删除、移动事件触发
|
||||
if [[ $FILE_EVENT =~ "DELETE" ]] || [[ $FILE_EVENT =~ "MOVED_FROM" ]]; then
|
||||
rsync -artuz --password-file=${PASSWORD} $(dirname ${FILE_PWD}) ${USER}@${HOST}::${Module}
|
||||
fi
|
||||
|
||||
# 修改属性事件触发[ touch, chgrp, chmod, chown ]
|
||||
if [[ $FILE_EVENT =~ "ATTRIB" ]]; then
|
||||
# 判断是否为目录, 如果是目录则不同步(在目录下文件修改属性时, 目录属性也会被修改)
|
||||
if [ ! -d "$INO_FILE" ]; then
|
||||
rsync -artuz --password-file=${PASSWORD} $(dirname ${FILE_PWD}) ${USER}@${HOST}::${Module}
|
||||
fi
|
||||
fi
|
||||
done
|
Reference in New Issue
Block a user