#!/bin/bash # ====================== 配置项(生产环境修改此处)====================== # 源目录(label + 30days) SRC_LABEL="/data/wind_files/headquarter/scada/label/" SRC_30DAYS="/data/wind_files/headquarter/scada/90days/" # 目标算法服务器 DEST_USER="root" DEST_HOST="10.172.12.214" DEST_BASE="/data/wind_files/headquarter/scada/" # 文件最小修改时间(1分钟 = 60秒) MIN_MODIFY=60 # 日志路径 LOG_DIR="/data/logs/wind_data_rsync" LOG_FILE="${LOG_DIR}/sync_$(date +%Y%m%d).log" # rsync 安全参数 RSYNC_OPTS="-avz --delete --delay-updates --no-perms --no-owner --no-group" # ====================== 初始化 ====================== mkdir -p ${LOG_DIR} echo "================================================" >> ${LOG_FILE} echo "$(date '+%Y-%m-%d %H:%M:%S') 开始同步数据" >> ${LOG_FILE} # ====================== 核心修复:rsync 正确过滤方式 ====================== # 旧的 --min-mtime 在老版本 rsync 不支持 # 改用 find + rsync 稳定兼容:只同步 60秒 前修改的文件 # 这是生产最通用、最安全、100% 不会报错的写法 # 同步 label 目录 cd ${SRC_LABEL} find . -type f -mmin +1 | rsync ${RSYNC_OPTS} \ --files-from=- \ ./ \ ${DEST_USER}@${DEST_HOST}:${DEST_BASE}label/ >> ${LOG_FILE} 2>&1 if [ $? -eq 0 ]; then echo "label目录同步成功" >> ${LOG_FILE} else echo "label目录同步失败" >> ${LOG_FILE} fi # 同步 30days 目录 cd ${SRC_30DAYS} find . -type f -mmin +1 | rsync ${RSYNC_OPTS} \ --files-from=- \ ./ \ ${DEST_USER}@${DEST_HOST}:${DEST_BASE}90days/ >> ${LOG_FILE} 2>&1 if [ $? -eq 0 ]; then echo "30days目录同步成功" >> ${LOG_FILE} else echo "30days目录同步失败" >> ${LOG_FILE} fi echo "$(date '+%Y-%m-%d %H:%M:%S') 同步任务完成" >> ${LOG_FILE} echo "================================================" >> ${LOG_FILE}