#!/bin/bash # 备份 nanobot workspace 核心文件 # 备份内容:SOUL.md, USER.md, TOOLS.md, AGENTS.md, HEARTBEAT.md, memory/ 目录 # 注意:skills 已通过 nanocode git 自动备份,此处不再重复 set -e # 配置 BACKUP_ROOT="/home/ubuntu/nanocode/backups" SOURCE_DIR="/home/ubuntu/.nanobot/workspace" NANOCODE_DIR="/home/ubuntu/nanocode" DATE=$(date +%Y-%m-%d) BACKUP_DIR="$BACKUP_ROOT/$DATE" # 要备份的顶层文件 TOP_FILES=( "SOUL.md" "USER.md" "TOOLS.md" "AGENTS.md" "HEARTBEAT.md" ) # 要备份的 memory 目录内容 MEMORY_FILES=( "memory/MEMORY.md" "memory/HISTORY.md" "memory/ARCHIVE.md" "memory/TECH.md" ) echo "🗄️ Workspace 核心文件备份" echo "📅 日期: $DATE" echo "📂 目标: $BACKUP_DIR" echo "" # 创建目录 mkdir -p "$BACKUP_DIR/memory" mkdir -p "$BACKUP_DIR/configs" # 1. 备份顶层文件 echo "📄 备份核心配置文件..." top_count=0 for file in "${TOP_FILES[@]}"; do src="$SOURCE_DIR/$file" if [ -f "$src" ]; then cp "$src" "$BACKUP_DIR/" echo " ✅ $file" top_count=$((top_count + 1)) else echo " ⚠️ $file (不存在)" fi done # 2. 备份 memory 文件 echo "" echo "🧠 备份记忆文件..." memory_count=0 for file in "${MEMORY_FILES[@]}"; do src="$SOURCE_DIR/$file" if [ -f "$src" ]; then cp "$src" "$BACKUP_DIR/memory/" echo " ✅ $file" memory_count=$((memory_count + 1)) else echo " ⚠️ $file (不存在)" fi done # 3. 备份关键配置(可选) echo "" echo "⚙️ 备份关键配置..." config_count=0 # 小红书配置 if [ -f "$SOURCE_DIR/skills/xiaohongshu_integration/xiaohongshu_enhanced_config.json" ]; then cp "$SOURCE_DIR/skills/xiaohongshu_integration/xiaohongshu_enhanced_config.json" "$BACKUP_DIR/configs/" echo " ✅ xiaohongshu 配置" config_count=$((config_count + 1)) fi # wewrite 配置 if [ -f "/home/ubuntu/wewrite/config.yaml" ]; then cp "/home/ubuntu/wewrite/config.yaml" "$BACKUP_DIR/configs/" echo " ✅ wewrite 配置" config_count=$((config_count + 1)) fi # 4. 生成报告 echo "" echo "📊 生成备份报告..." cat > "$BACKUP_DIR/README.md" << EOF # Workspace 备份报告 ## 备份信息 - **时间**: $(date '+%Y-%m-%d %H:%M:%S') - **日期**: $DATE ## 备份内容 ### 核心配置文件 ($top_count 个) $(ls -1 "$BACKUP_DIR"/*.md 2>/dev/null | xargs -n1 basename | sed 's/^/- /' || echo "- 无") ### 记忆文件 ($memory_count 个) $(ls -1 "$BACKUP_DIR/memory/" 2>/dev/null | sed 's/^/- /' || echo "- 无") ### 应用配置 ($config_count 个) $(ls -1 "$BACKUP_DIR/configs/" 2>/dev/null | sed 's/^/- /' || echo "- 无") ## 说明 - 本备份**不包含 skills**(已通过 nanocode git 自动备份) - 每周自动备份一次 - 如需恢复,直接复制文件到 $SOURCE_DIR ## 手动恢复命令 \`\`\`bash # 恢复顶层文件 cp "$BACKUP_DIR/"*.md $SOURCE_DIR/ # 恢复 memory 文件 cp "$BACKUP_DIR/memory/"*.md $SOURCE_DIR/memory/ \`\`\` EOF echo "" echo "📈 备份统计:" echo " - 核心配置: $top_count 个" echo " - 记忆文件: $memory_count 个" echo " - 应用配置: $config_count 个" echo "" # 5. Git 提交 echo "📝 提交到 Git..." cd "$NANOCODE_DIR" if git diff --quiet HEAD -- "$BACKUP_ROOT" 2>/dev/null && [ -z "$(git status --porcelain "$BACKUP_ROOT" 2>/dev/null)" ]; then echo " 📝 无新变更需要提交" else git add "$BACKUP_ROOT" git commit -m "Weekly workspace backup: $DATE (memory + configs)" -m "- 核心配置: $top_count" -m "- 记忆文件: $memory_count" -m "- 应用配置: $config_count" git push origin master echo " ✅ 已提交到 Git" fi echo "" echo "🎉 备份完成!" echo "📁 位置: $BACKUP_DIR"