rsync 同步文件并删除源文件
同步删除文件
rsync -avh --remove-source-files root@ip:/src /dest
同步单个排除文件或者目录
rsync -avlt /home/app_logs/app/ /home/logs_bak/app_logs/$dirname/ --exclude "file.txt"
同步多个个排除文件或者目录
rsync -avlt /home/app_logs/app/ /home/logs_bak/app_logs/$dirname/ --exclude={"file.txt","dir1/*","dir2"}
Linux rsync命令用法详解:使用 rsync 命令使用--增量、全量同步备份文件 - 蒲公英PGY - 博客园
同步服务器日志文件进行统一存储的一个简单脚本
#!/bin/bash
echo "start-time: $(date +"%Y-%m-%d %H:%M:%S")"
# 需要同步的IP列表,空格隔开,不是逗号
server_ip=(ip1 ip2 ip3 ip4)
# 获取一个月前的日期(格式: YYYY-MM-DD)
one_month_ago=$(date -d "1 month ago" +"%Y-%m-%d")
for ip in "${server_ip[@]}"; do
echo "=============================="
echo "🔍 检查服务器:$ip 的日志文件"
# 获取远程符合条件的日志文件列表(保留完整路径)
# file_list=$(ssh root@$ip "find /home/app_logs/app/ -type f -name '*.log.gz' -mtime +30")
# 获取远程符合条件的日志文件列表(保留完整路径)排除路径中有rocketmqlogs的文件
file_list=$(ssh root@$ip "find /home/app_logs/app/ -type d \( -path '*/rocketmqlogs' -o -path '*/originalMessage' \) -prune -o -type f -name '*.log.gz' -mtime +30 -print")
if [[ -z "$file_list" ]]; then
echo "❌ 没有符合条件的日志文件,跳过 $ip"
continue
fi
echo "📂 以下文件将被同步:"
echo "$file_list"
# 让用户确认是否继续同步
read -p "是否继续同步这些文件?(y/n): " confirm
if [[ "$confirm" != "y" ]]; then
echo "⏭️ 跳过 $ip"
continue
fi
echo "🚀 开始同步 $ip 的日志"
for file in $file_list; do
# 提取文件所在的子目录(去掉 /home/app_logs/app/ 前缀)
sub_dir=$(dirname "${file#/home/app_logs/app/}")
# 定义本地存储路径
dest_dir="/home/logs_bak/app_logs/server_${ip}/${sub_dir}"
# 创建本地目录结构
mkdir -p "$dest_dir"
# 执行同步,同步时删除源文件
rsync -av --remove-source-files "root@$ip:$file" "$dest_dir/"
done
# 删除远程空目录
# ssh root@$ip "find /home/app_logs/app/ -type d -empty -delete"
echo "✅ 同步完成:$ip"
done
echo "end-time: $(date +"%Y-%m-%d %H:%M:%S")"

浙公网安备 33010602011771号