You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rsync实操:如何分批复制文件、暂停后重复执行

分批同步XML文件的Shell脚本实现

这个场景我之前帮朋友处理过类似的,刚好可以给你一个实用的bash脚本方案,完美适配你的需求——每次同步2500个文件,等待5分钟后继续下一批,直到所有文件处理完毕。

核心脚本示例

#!/bin/bash

# 配置参数,根据你的实际情况修改
SOURCE_DIR="/path/to/your/xml/files"
TARGET="user@remote-server:/path/to/target/dir"
BATCH_SIZE=2500
WAIT_SECONDS=300  # 5分钟=300秒

# 循环处理直到源目录没有XML文件
while true; do
    # 用null分隔符处理带空格/特殊字符的文件名,避免出错
    FILES=$(find "$SOURCE_DIR" -maxdepth 1 -type f -name "*.xml" -print0 | head -z -n $BATCH_SIZE)
    
    # 如果没有找到文件,退出循环
    if [ -z "$FILES" ]; then
        echo "所有XML文件已同步完成,退出脚本"
        break
    fi

    # 同步选中的文件,同步成功后删除源文件
    echo "开始同步 $BATCH_SIZE 个文件..."
    echo -e "$FILES" | rsync -av --remove-source-files --files-from=- --from0 "$SOURCE_DIR/" "$TARGET"

    # 检查rsync是否执行成功
    if [ $? -eq 0 ]; then
        echo "本次同步完成,等待 $WAIT_SECONDS 秒..."
        sleep $WAIT_SECONDS
    else
        echo "本次同步失败,将在10秒后重试..."
        sleep 10
    fi
done

关键细节解释

  • 文件名安全处理:用find ... -print0和rsync --from0来处理包含空格、特殊字符的文件名,避免脚本因为文件名问题报错。
  • 同步后删除源文件:rsync --remove-source-files参数会在文件成功同步到目标服务器后才删除源文件,比单独用rm更安全,避免同步失败导致文件丢失。
  • 循环终止条件:每次循环开始时检查源目录是否还有XML文件,没有就自动退出。
  • 错误重试:如果rsync执行失败(比如网络中断),脚本会等待10秒后重试,避免直接中断整个流程。

可选调整:按特定顺序同步

如果需要按修改时间、字母顺序或者随机顺序选择文件,可以修改find命令的部分:

  1. 按字母顺序排序:
FILES=$(find "$SOURCE_DIR" -maxdepth 1 -type f -name "*.xml" | sort | head -n $BATCH_SIZE | tr '\n' '\0')
  1. 按修改时间从旧到新排序:
FILES=$(find "$SOURCE_DIR" -maxdepth 1 -type f -name "*.xml" -printf "%T@ %p\n" | sort -n | cut -d' ' -f2- | head -n $BATCH_SIZE | tr '\n' '\0')
  1. 随机选择文件:
FILES=$(find "$SOURCE_DIR" -maxdepth 1 -type f -name "*.xml" | shuf | head -n $BATCH_SIZE | tr '\n' '\0')

使用说明

  1. 修改脚本中的SOURCE_DIR、TARGET等参数为你的实际路径和服务器信息。
  2. 给脚本添加执行权限:chmod +x sync_batch.sh。
  3. 可以把脚本放到后台运行,或者用nohup保证断开连接后继续执行:nohup ./sync_batch.sh > sync_log.out 2>&1 &

内容的提问来源于stack exchange,提问作者user2792137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:48:59