Shell脚本如何同步本地到云存储

wen 实用脚本 1

本文目录导读:

Shell脚本如何同步本地到云存储

  1. 通用方案:使用Rclone
  2. 阿里云OSS
  3. AWS S3
  4. 腾讯云COS
  5. 定时任务自动化
  6. 完整的同步脚本模板
  7. 注意事项

这里介绍几种常见的通过Shell脚本同步本地文件到云存储的方法,我会涵盖主流云服务(阿里云OSS、AWS S3、腾讯云COS)以及通用方案。

通用方案:使用Rclone

Rclone 支持几乎所有主流云存储,是最推荐的通用工具。

安装 Rclone

# Linux
curl https://rclone.org/install.sh | sudo bash
# macOS
brew install rclone

配置 Rclone

# 交互式配置(按提示选择云存储并输入密钥)
rclone config

同步脚本示例

#!/bin/bash
# 配置变量
LOCAL_PATH="/path/to/local/folder"
REMOTE_PATH="remote_name:bucket-name/folder"
LOG_FILE="/var/log/sync.log"
# 使用 rclone sync 进行同步(目标端会完全匹配源端)
rclone sync "$LOCAL_PATH" "$REMOTE_PATH" \
  --progress \
  --log-file="$LOG_FILE" \
  --log-level=INFO \
  --delete-excluded \
  --exclude="*.tmp" \
  --exclude="node_modules/**"
# 或者使用 copy(只上传新增/修改的文件,不删除目标端多余文件)
# rclone copy "$LOCAL_PATH" "$REMOTE_PATH" --progress --log-file="$LOG_FILE"

阿里云OSS

使用官方工具 ossutil

安装与配置

# 安装 ossutil
curl -o ossutil https://ossutil.oss-cn-hangzhou.aliyuncs.com/ossutil-v2.0.2-linux-amd64.zip
unzip ossutil && chmod +x ossutil
# 配置(交互式输入AK/Secret)
./ossutil config

同步脚本

#!/bin/bash
LOCAL_DIR="/data/backup"
OSS_BUCKET="oss://my-bucket/backup/"
OSS_CONFIG_FILE="/root/.ossutilconfig"
# 同步到OSS(增量同步)
ossutil sync "$LOCAL_DIR" "$OSS_BUCKET" \
  --config-file="$OSS_CONFIG_FILE" \
  --delete \
  --update \
  --exclude "*.log" \
  --retry-times=3
# 输出结果
if [ $? -eq 0 ]; then
  echo "[$(date)] 同步成功" >> /var/log/oss-sync.log
else
  echo "[$(date)] 同步失败" >> /var/log/oss-sync.log
fi

AWS S3

使用官方 AWS CLI。

安装与配置

# 安装 AWS CLI
pip install awscli
# 或者用包管理器
# apt-get install awscli (Ubuntu)
# yum install awscli (CentOS)
# 配置凭证
aws configure
# 输入 Access Key ID, Secret Access Key, Region

同步脚本

#!/bin/bash
LOCAL_DIR="/var/www/html"
S3_BUCKET="s3://my-website-backup/html"
AWS_PROFILE="default"
# 同步到 S3
aws s3 sync "$LOCAL_DIR" "$S3_BUCKET" \
  --profile "$AWS_PROFILE" \
  --delete \
  --exclude ".git/*" \
  --exclude "*.swp" \
  --region cn-north-1 \
  --acl private
# 或者只上传新增文件(不删除远程)
# aws s3 cp "$LOCAL_DIR" "$S3_BUCKET" --recursive

腾讯云COS

使用 coscli 工具。

安装与配置

# 下载 coscli
wget https://github.com/tencentyun/coscli/releases/latest/download/coscli-linux
mv coscli-linux coscli
chmod +x coscli
# 配置
./coscli config -a <SecretId> -s <SecretKey> -b <BucketName> -r <Region>

同步脚本

#!/bin/bash
LOCAL_DIR="/data/database_backup"
COS_BUCKET="cos://my-bucket/backup/"
COS_CONFIG="/root/.cos.yaml"
# 同步到COS
./coscli sync "$LOCAL_DIR" "$COS_BUCKET" \
  --config-file="$COS_CONFIG" \
  --delete \
  --exclude "*.bak" \
  --part-size=32
echo "[$(date)] COS同步完成" >> /var/log/cos-sync.log

定时任务自动化

使用 crontab 定期执行同步脚本。

设置 crontab

# 编辑定时任务
crontab -e
# 每天凌晨2点同步
0 2 * * * /path/to/sync-script.sh
# 每3小时同步一次
0 */3 * * * /path/to/sync-script.sh
# 每30分钟同步一次
*/30 * * * * /path/to/sync-script.sh

完整的同步脚本模板

这是一个更完整、带有错误处理和通知的同步脚本:

#!/bin/bash
# ========== 配置区域 ==========
LOCAL_PATH="/data/important"
CLOUD_PATH="s3://backup-bucket/data"
LOG_FILE="/var/log/cloud-sync.log"
NOTIFY_EMAIL="admin@example.com"
MAX_RETRIES=3
# ==============================
# 日志函数
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# 错误处理
handle_error() {
    log "错误: $1"
    echo "备份同步失败: $1" | mail -s "[Alert] 云同步失败" "$NOTIFY_EMAIL"
    exit 1
}
# 检查依赖
if ! command -v rclone &> /dev/null; then
    handle_error "rclone 未安装"
fi
# 检查本地路径
if [ ! -d "$LOCAL_PATH" ]; then
    handle_error "本地路径不存在: $LOCAL_PATH"
fi
log "开始同步: $LOCAL_PATH -> $CLOUD_PATH"
# 执行同步(带重试)
for i in $(seq 1 $MAX_RETRIES); do
    log "第 $i 次尝试同步..."
    if rclone sync "$LOCAL_PATH" "$CLOUD_PATH" \
        --verbose \
        --log-file="$LOG_FILE" \
        --stats=10s \
        2>&1; then
        log "同步成功完成"
        # 可选:同步完成后验证
        log "验证同步结果..."
        rclone check "$LOCAL_PATH" "$CLOUD_PATH" --one-way
        exit 0
    else
        log "第 $i 次同步失败"
        sleep 10  # 等待10秒后重试
    fi
done
handle_error "所有重试均失败"

注意事项

  1. 权限管理:不要在脚本中硬编码密钥,使用环境变量或专用的凭证文件
  2. 增量同步:大多数工具支持增量同步,每次只传输变化的部分
  3. 排除文件:使用 --exclude 跳过临时文件、缓存等
  4. 日志记录:记录每次同步的结果,便于排查问题
  5. 网络检测:如果网络不稳定,可以增加重试机制
  6. 备份策略:考虑 3-2-1 备份原则(3份备份、2种介质、1份异地)

选择哪种方案取决于你使用的云服务商,如果希望统一管理多个云服务,Rclone 是最佳选择;如果只使用单一云服务,使用官方CLI通常集成度更好、功能更全。

抱歉,评论功能暂时关闭!