442 字
2 分钟
rclone定时备份文件到网盘
前言
建站都遇到过vps宕机,没有备份网站,导致网站数据丢失。可以利用这个脚本,定时备份文件到网盘。
安装rclone
curl https://rclone.org/install.sh | sudo bashrclone 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点和中午12点执行
0 0,12 * * * /脚本路径