前言
建站都遇到过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 2 * * * /脚本路径
评论区