同步脚本
该脚本支持“远程→本地”或“本地→远程”双向同步,自动检测文件大小、修改时间差异,跳过已完整复制的文件,中断后重新运行可直接续传。
#!/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步排查即可解决,操作简单且必能修复:
- 先解决核心问题:赋予脚本可执行权限(最常见原因)
在终端进入脚本所在文件夹,执行命令给脚本加权限(假设脚本名叫 rsync_sync.sh ):
bash
chmod +x rsync_sync.sh
加完权限后,再用以下命令运行(二选一,推荐第一种):
./rsync_sync.sh
bash rsync_sync.sh
- 若仍报错,排查脚本格式(复制粘贴可能带隐藏字符)
若执行后提示“语法错误”,可能是复制时带入了Windows格式的换行符( \r ),执行以下命令转换为Linux格式:
bash
dos2unix rsync_sync.sh
(若提示 dos2unix 未安装,先装工具: sudo apt install -y dos2unix ,再执行转换)
按以上步骤操作后,脚本基本能正常运行。如果仍报错,可把终端显示的完整错误信息发给我,我能帮你精准定位问题。