| # ---------------------------- | |
| # 配置部分 | |
| # ---------------------------- | |
| # 本地需要备份/还原的路径 | |
| # 目录末尾加 "/" 表示目录 | |
| 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 | |