目 录CONTENT

文章目录

rclone定时备份文件到网盘

Leu
Leu
2025-10-13 / 0 评论 / 1 点赞 / 36 阅读 / 0 字

前言

建站都遇到过vps宕机,没有备份网站,导致网站数据丢失。可以利用这个脚本,定时备份文件到网盘。

安装rclone

curl https://rclone.org/install.sh | sudo bash
rclone config

以mega网盘为例

脚本

#!/bin/bash

# ==============================
#        可配置项
# ==============================

# 要备份的目录(不要加 /)
source_dir="/备份目录"

# 本地备份目录
backup_dir="/本地备份目录"
mkdir -p "$backup_dir"

# rclone 远程路径(例如 gdrive:/backup)
remote="路径:/文件路径"

# 允许通过环境变量设置自定义前缀,默认值为 "backup"
filename_prefix="${FILENAME_PREFIX:-backup}"

# ==============================
#        自动变量
# ==============================

now=$(date +"%Y-%m-%d_%H-%M-%S")
backup_file="$backup_dir/${filename_prefix}_${now}.zip"

parent_dir=$(dirname "$source_dir")
target_dir=$(basename "$source_dir")

echo "======================================"
echo "📦 开始备份任务"
echo "源目录: $source_dir"
echo "备份文件: $backup_file"
echo "======================================"

# ==============================
#         开始压缩(静默)
# ==============================

cd "$parent_dir" || { echo "❌ 无法进入目录 $parent_dir"; exit 1; }

echo "📦 正在压缩..."
zip -r "$backup_file" "$target_dir" > /dev/null

if [ $? -ne 0 ]; then
    echo "❌ 压缩失败"
    exit 1
fi

echo "✅ 压缩完成"
du -h "$backup_file"

# ==============================
#         上传到远程(显示进度)
# ==============================

echo "======================================"
echo "📤 开始上传到远程:$remote"
echo "======================================"

rclone copy "$backup_file" "$remote" \
    --progress \
    --stats 5s \
    --stats-one-line \
    --transfers=1 \
    --checkers=1

if [ $? -ne 0 ]; then
    echo "❌ 上传失败"
    exit 1
fi

echo "✅ 上传完成"

# ==============================
#      清理本地旧备份
# ==============================

echo "🗑️ 清理本地旧备份(保留最近 3 个)..."

ls -1t "$backup_dir"/${filename_prefix}_*.zip 2>/dev/null | sed -e '1,3d' | while read old_file; do
    echo "删除本地:$old_file"
    rm -f "$old_file"
done

# ==============================
#      清理远程旧备份
# ==============================

echo "🗑️ 清理远程旧备份(保留最近 3 个)..."

rclone lsf "$remote" --files-only | \
grep "^${filename_prefix}_" | \
sort -r | \
awk 'NR>3' | \
while read file; do
    echo "删除远程:$file"
    rclone deletefile "$remote/$file"
done

echo "======================================"
echo "🎉 所有操作完成"
echo "======================================"

设置定时任务

crontab -e

每天凌晨两点执行

0 2 * * * /脚本路径

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区