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")"
posted @ 2022-04-12 18:05  蒲公英PGY  阅读(661)  评论(0)    收藏  举报