#!/bin/bash # ---------------------------- # 配置部分 # ---------------------------- # 本地需要备份/还原的路径 # 目录末尾加 "/" 表示目录 OPENCLAW_PATHS=" /root/.hermes/ /root/.pm2/ /root/hermes-web-ui/ " # ---------------------------- # 备份函数 # ---------------------------- backup() { echo "=== 开始备份 ===" for path in $OPENCLAW_PATHS; do if [ -d "$path" ]; then echo "📁 备份目录: $path" rclone mkdir "$REMOTE_FOLDER/$path" 2>/dev/null || true rclone sync --checksum --progress --create-empty-src-dirs "$path" "$REMOTE_FOLDER/$path" echo "✅ 完成: $path" elif [ -f "$path" ]; then echo "📄 备份文件: $path" parent_dir=$(dirname "$path") rclone mkdir "$REMOTE_FOLDER$parent_dir/" 2>/dev/null || true rclone copy --checksum --progress "$path" "$REMOTE_FOLDER$parent_dir/" echo "✅ 完成: $path" else echo "⚠️ 路径不存在: $path" fi done echo "=== 备份完成 ===" } # ---------------------------- # 还原函数 # ---------------------------- restore() { echo "=== 开始还原备份 ===" for path in $OPENCLAW_PATHS; do if [ -d "$path" ] || [[ "$path" == */ ]]; then echo "📁 还原目录: $path" mkdir -p "$path" rclone sync --checksum --progress --create-empty-src-dirs "$REMOTE_FOLDER/$path" "$path" echo "✅ 完成: $path" else echo "📄 还原文件: $path" target_dir=$(dirname "$path") mkdir -p "$target_dir" parent_dir=$(dirname "$path") filename=$(basename "$path") rclone copy --checksum --progress "$REMOTE_FOLDER$parent_dir/$filename" "$target_dir/" echo "✅ 完成: $path" fi done echo "=== 还原完成 ===" } # ---------------------------- # 主入口 # ---------------------------- case "$1" in backup) backup ;; restore) restore ;; *) echo "Usage: $0 {backup|restore}" exit 1 ;; esac