Files
nanocode/backup_workspace.sh
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

149 lines
3.7 KiB
Bash
Executable File

#!/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"