同步脚本

该脚本支持“远程→本地”或“本地→远程”双向同步,自动检测文件大小、修改时间差异,跳过已完整复制的文件,中断后重新运行可直接续传。

#!/bin/bash
# 功能:自动跳过已复制文件,支持断点续传的 rsync 同步脚本
# 使用说明:1. 替换下方【配置参数】中的路径与IP;2. 赋予执行权限:chmod +x rsync_sync.sh;3. 运行:./rsync_sync.sh

# --------------------------【配置参数】--------------------------
SYNC_MODE="remote_to_local"  # 同步模式:remote_to_local(远程→本地)、local_to_remote(本地→远程)
REMOTE_USER="your_username"  # 远程服务器用户名(如 root、pi)
REMOTE_IP="192.168.1.100"    # 远程服务器IP(如 192.168.1.100)
REMOTE_PATH="/remote/files"  # 远程文件路径(如 /home/data)
LOCAL_PATH="/local/files"    # 本地文件路径(如 /mnt/backup)
# -----------------------------------------------------------------

# 检查 rsync 是否安装
if ! command -v rsync &> /dev/null; then
    echo "错误:未安装 rsync,正在自动安装..."
    # 适配 Debian/Ubuntu 系统,其他系统可替换为 yum install -y rsync
    sudo apt update && sudo apt install -y rsync
    if [ $? -ne 0 ]; then
        echo "rsync 安装失败,请手动安装后重试"
        exit 1
    fi
fi

# 执行同步(核心命令)
echo "开始同步,模式:$SYNC_MODE,自动跳过已复制文件..."
if [ "$SYNC_MODE" = "remote_to_local" ]; then
    # 远程→本地同步
    rsync -av --progress --partial --delete \
    "$REMOTE_USER@$REMOTE_IP:$REMOTE_PATH/" "$LOCAL_PATH/"
elif [ "$SYNC_MODE" = "local_to_remote" ]; then
    # 本地→远程同步
    rsync -av --progress --partial --delete \
    "$LOCAL_PATH/" "$REMOTE_USER@$REMOTE_IP:$REMOTE_PATH/"
else
    echo "错误:同步模式设置错误,仅支持 remote_to_local 或 local_to_remote"
    exit 1
fi

# 检查同步结果
if [ $? -eq 0 ]; then
    echo "同步完成!所有已复制文件已自动跳过,中断文件已续传"
else
    echo "同步中断!下次运行脚本将自动续传,无需重新复制已完成文件"
    exit 1
fi

使用步骤

1. 复制上述脚本内容,在本地创建文件(如  rsync_sync.sh );

2. 打开文件,修改【配置参数】中的  REMOTE_USER 、 REMOTE_IP  等信息,匹配你的实际环境;

3. 执行命令赋予权限: chmod +x rsync_sync.sh ;

4. 运行脚本: ./rsync_sync.sh ,终端会实时显示传输进度,中断后重新运行即可续传。

错误排除

“不能运行sh文件”通常是文件权限不足或脚本格式有问题,按以下2步排查即可解决,操作简单且必能修复:

  1. 先解决核心问题:赋予脚本可执行权限(最常见原因)

在终端进入脚本所在文件夹,执行命令给脚本加权限(假设脚本名叫 rsync_sync.sh ):

bash

chmod +x rsync_sync.sh
 

加完权限后,再用以下命令运行(二选一,推荐第一种):

  • 方式1(最稳妥):
    bash

./rsync_sync.sh
 

  • 方式2(直接指定shell解释器):
    bash

bash rsync_sync.sh
 

  1. 若仍报错,排查脚本格式(复制粘贴可能带隐藏字符)

若执行后提示“语法错误”,可能是复制时带入了Windows格式的换行符( \r ),执行以下命令转换为Linux格式:

bash

dos2unix rsync_sync.sh
 

(若提示 dos2unix 未安装,先装工具: sudo apt install -y dos2unix ,再执行转换)

按以上步骤操作后,脚本基本能正常运行。如果仍报错,可把终端显示的完整错误信息发给我,我能帮你精准定位问题。

标签: none

添加新评论