OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  clawdbot-backup:ClawdBot 配置与技能的备份与恢复

clawdbot-backup:ClawdBot 配置与技能的备份与恢复

 
  tvos ·  2026-02-02 10:55:39 · 18 次点击  · 0 条评论  

名称: clawdbot-backup
描述: 备份与恢复 ClawdBot 的配置、技能、命令和设置。支持跨设备同步、Git 版本控制、自动备份以及迁移到新机器。
主页: https://github.com/clawdbot/backup-skill
元数据: {"clawdbot":{"emoji":"💾","requires":{"bins":["git","tar","rsync"],"env":[]}}}


ClawdBot 备份技能

直接在 ClawdBot 中备份、恢复和同步你的配置到不同设备。

概述

此技能帮助你:
- 备份所有 ClawdBot 数据和设置
- 从备份中恢复
- 在多台机器间同步
- 对配置进行版本控制
- 自动化备份流程
- 迁移到新设备

ClawdBot 目录结构

关键位置

~/.claude/                    # ClawdBot 主目录
├── settings.json             # 全局设置
├── settings.local.json       # 本地覆盖设置(机器特定)
├── projects.json             # 项目配置
├── skills/                   # 你的自定义技能
│   ├── skill-name/
│   │   ├── SKILL.md
│   │   └── supporting-files/
│   └── another-skill/
├── commands/                 # 自定义斜杠命令(旧版)
│   └── command-name.md
├── contexts/                 # 保存的上下文
├── templates/                # 响应模板
└── mcp/                      # MCP 服务器配置
    └── servers.json

~/projects/                   # 你的项目(可选备份)
├── project-1/
│   └── .claude/              # 项目特定配置
│       ├── settings.json
│       └── skills/
└── project-2/

备份内容指南

必需备份(始终备份):
✓ ~/.claude/skills/           # 自定义技能
✓ ~/.claude/commands/         # 自定义命令
✓ ~/.claude/settings.json     # 全局设置
✓ ~/.claude/mcp/              # MCP 配置

推荐备份(通常备份):
✓ ~/.claude/contexts/         # 保存的上下文
✓ ~/.claude/templates/        # 模板
✓ 项目中的 .claude/ 文件夹    # 项目配置

可选备份(视情况而定):
○ ~/.claude/settings.local.json  # 机器特定设置
○ 缓存目录                      # 可以重建
○ 日志文件                      # 通常不需要

快速备份命令

完整备份

# 创建带时间戳的备份
BACKUP_DIR="$HOME/clawdbot-backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="clawdbot_backup_$TIMESTAMP"

mkdir -p "$BACKUP_DIR"

tar -czvf "$BACKUP_DIR/$BACKUP_NAME.tar.gz" \
  -C "$HOME" \
  .claude/skills \
  .claude/commands \
  .claude/settings.json \
  .claude/mcp \
  .claude/contexts \
  .claude/templates \
  2>/dev/null

echo "备份已创建:$BACKUP_DIR/$BACKUP_NAME.tar.gz"

仅备份技能(快速)

# 仅备份技能
tar -czvf ~/clawdbot_skills_$(date +%Y%m%d).tar.gz \
  -C "$HOME" .claude/skills .claude/commands

从备份恢复

# 恢复完整备份
BACKUP_FILE="$HOME/clawdbot-backups/clawdbot_backup_20260129.tar.gz"

# 首先预览内容
tar -tzvf "$BACKUP_FILE"

# 恢复(将覆盖现有文件)
tar -xzvf "$BACKUP_FILE" -C "$HOME"

echo "恢复完成!"

备份脚本

功能完整的备份脚本

#!/bin/bash
# clawdbot-backup.sh - 全面的 ClawdBot 备份工具

set -e

# 配置
BACKUP_ROOT="${CLAWDBOT_BACKUP_DIR:-$HOME/clawdbot-backups}"
CLAUDE_DIR="$HOME/.claude"
MAX_BACKUPS=10  # 保留最近 N 个备份
TIMESTAMP=$(date +%Y%m%d_%H%M%S)

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

log_info() { echo -e "${GREEN}[信息]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[警告]${NC} $1"; }
log_error() { echo -e "${RED}[错误]${NC} $1"; }

# 检查 ClawdBot 目录是否存在
check_claude_dir() {
    if [ ! -d "$CLAUDE_DIR" ]; then
        log_error "未找到 ClawdBot 目录:$CLAUDE_DIR"
        exit 1
    fi
}

# 创建备份
create_backup() {
    local backup_type="${1:-full}"
    local backup_name="clawdbot_${backup_type}_${TIMESTAMP}"
    local backup_path="$BACKUP_ROOT/$backup_name.tar.gz"

    mkdir -p "$BACKUP_ROOT"

    log_info "正在创建 $backup_type 备份..."

    case $backup_type in
        full)
            tar -czvf "$backup_path" \
                -C "$HOME" \
                .claude/skills \
                .claude/commands \
                .claude/settings.json \
                .claude/settings.local.json \
                .claude/projects.json \
                .claude/mcp \
                .claude/contexts \
                .claude/templates \
                2>/dev/null || true
            ;;
        skills)
            tar -czvf "$backup_path" \
                -C "$HOME" \
                .claude/skills \
                .claude/commands \
                2>/dev/null || true
            ;;
        settings)
            tar -czvf "$backup_path" \
                -C "$HOME" \
                .claude/settings.json \
                .claude/settings.local.json \
                .claude/mcp \
                2>/dev/null || true
            ;;
        *)
            log_error "未知备份类型:$backup_type"
            exit 1
            ;;
    esac

    if [ -f "$backup_path" ]; then
        local size=$(du -h "$backup_path" | cut -f1)
        log_info "备份已创建:$backup_path ($size)"
    else
        log_error "备份失败!"
        exit 1
    fi
}

# 列出备份
list_backups() {
    log_info "$BACKUP_ROOT 中的可用备份:"
    echo ""

    if [ -d "$BACKUP_ROOT" ]; then
        ls -lh "$BACKUP_ROOT"/*.tar.gz 2>/dev/null | \
            awk '{print $9, $5, $6, $7, $8}' || \
            echo "未找到备份。"
    else
        echo "备份目录不存在。"
    fi
}

# 恢复备份
restore_backup() {
    local backup_file="$1"

    if [ -z "$backup_file" ]; then
        log_error "请指定备份文件"
        list_backups
        exit 1
    fi

    if [ ! -f "$backup_file" ]; then
        # 尝试在备份目录中查找相对路径
        backup_file="$BACKUP_ROOT/$backup_file"
    fi

    if [ ! -f "$backup_file" ]; then
        log_error "未找到备份文件:$backup_file"
        exit 1
    fi

    log_warn "这将覆盖现有配置!"
    read -p "继续?(y/N) " confirm

    if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
        log_info "已取消恢复。"
        exit 0
    fi

    log_info "正在从 $backup_file 恢复..."
    tar -xzvf "$backup_file" -C "$HOME"
    log_info "恢复完成!"
}

# 清理旧备份
cleanup_backups() {
    log_info "正在清理旧备份(保留最近 $MAX_BACKUPS 个)..."

    cd "$BACKUP_ROOT" 2>/dev/null || return

    local count=$(ls -1 *.tar.gz 2>/dev/null | wc -l)

    if [ "$count" -gt "$MAX_BACKUPS" ]; then
        local to_delete=$((count - MAX_BACKUPS))
        ls -1t *.tar.gz | tail -n "$to_delete" | xargs rm -v
        log_info "已删除 $to_delete 个旧备份"
    else
        log_info "无需清理(现有 $count 个备份)"
    fi
}

# 显示备份统计信息
show_stats() {
    log_info "ClawdBot 备份统计"
    echo ""

    echo "=== 目录大小 ==="
    du -sh "$CLAUDE_DIR"/skills 2>/dev/null || echo "技能:N/A"
    du -sh "$CLAUDE_DIR"/commands 2>/dev/null || echo "命令:N/A"
    du -sh "$CLAUDE_DIR"/mcp 2>/dev/null || echo "MCP:N/A"
    du -sh "$CLAUDE_DIR" 2>/dev/null || echo "总计:N/A"

    echo ""
    echo "=== 技能数量 ==="
    find "$CLAUDE_DIR/skills" -name "SKILL.md" 2>/dev/null | wc -l | xargs echo "技能:"
    find "$CLAUDE_DIR/commands" -name "*.md" 2>/dev/null | wc -l | xargs echo "命令:"

    echo ""
    echo "=== 备份目录 ==="
    if [ -d "$BACKUP_ROOT" ]; then
        du -sh "$BACKUP_ROOT"
        ls -1 "$BACKUP_ROOT"/*.tar.gz 2>/dev/null | wc -l | xargs echo "备份文件:"
    else
        echo "暂无备份"
    fi
}

# 使用说明
usage() {
    cat << EOF
ClawdBot 备份工具

用法:$(basename $0) <命令> [选项]

命令:
    backup [类型]   创建备份(类型:full, skills, settings)
    restore <文件>  从备份文件恢复
    list            列出可用备份
    cleanup         清理旧备份(保留最近 $MAX_BACKUPS 个)
    stats           显示备份统计信息
    help            显示此帮助信息

示例:
    $(basename $0) backup               # 完整备份
    $(basename $0) backup skills        # 仅备份技能
    $(basename $0) restore latest.tar.gz
    $(basename $0) list
    $(basename $0) cleanup

环境变量:
    CLAWDBOT_BACKUP_DIR    备份目录(默认:~/clawdbot-backups)

EOF
}

# 主函数
main() {
    check_claude_dir

    case "${1:-help}" in
        backup)
            create_backup "${2:-full}"
            ;;
        restore)
            restore_backup "$2"
            ;;
        list)
            list_backups
            ;;
        cleanup)
            cleanup_backups
            ;;
        stats)
            show_stats
            ;;
        help|--help|-h)
            usage
            ;;
        *)
            log_error "未知命令:$1"
            usage
            exit 1
            ;;
    esac
}

main "$@"

保存与使用

# 保存脚本
cat > ~/.local/bin/clawdbot-backup << 'SCRIPT'
# 在此处粘贴脚本内容
SCRIPT

chmod +x ~/.local/bin/clawdbot-backup

# 使用
clawdbot-backup backup          # 完整备份
clawdbot-backup backup skills   # 仅备份技能
clawdbot-backup list            # 列出备份
clawdbot-backup restore <文件>  # 恢复

Git 版本控制

初始化 Git 仓库

cd ~/.claude

# 初始化 git
git init

# 创建 .gitignore
cat > .gitignore << 'EOF'
# 机器特定设置
settings.local.json

# 缓存和临时文件
cache/
*.tmp
*.log

# 大文件
*.tar.gz
*.zip

# 敏感数据(如有)
*.pem
*.key
credentials/
EOF

# 初始提交
git add .
git commit -m "初始 ClawdBot 配置备份"

推送到远程仓库

# 添加远程仓库(GitHub, GitLab 等)
git remote add origin git@github.com:username/clawdbot-config.git

# 推送
git push -u origin main

日常工作流

# 修改技能/设置后
cd ~/.claude
git add .
git commit -m "更新技能:trading-bot"
git push

自动提交脚本

#!/bin/bash
# auto-commit-claude.sh - 自动提交更改

cd ~/.claude || exit 1

# 检查是否有更改
if git diff --quiet && git diff --staged --quiet; then
    echo "没有需要提交的更改"
    exit 0
fi

# 获取更改的文件用于提交信息
CHANGED=$(git status --short | head -5 | awk '{print $2}' | tr '\n' ', ')

git add .
git commit -m "自动备份:$CHANGED ($(date +%Y-%m-%d))"
git push 2>/dev/null || echo "推送失败(离线?)"

跨设备同步

方法 1:Git 同步

# 在新设备上
git clone git@github.com:username/clawdbot-config.git ~/.claude

# 拉取最新更改
cd ~/.claude && git pull

# 推送本地更改
cd ~/.claude && git add . && git commit -m "更新" && git push

方法 2:Rsync 同步

# 同步到远程服务器
rsync -avz --delete \
    ~/.claude/ \
    user@server:~/clawdbot-backup/

# 从远程服务器同步
rsync -avz --delete \
    user@server:~/clawdbot-backup/ \
    ~/.claude/

方法 3:云存储

# 备份到云文件夹(Dropbox, Google Drive 等)
CLOUD_DIR="$HOME/Dropbox/ClawdBot"

# 同步技能
rsync -avz ~/.claude/skills/ "$CLOUD_DIR/skills/"
rsync -avz ~/.claude/commands/ "$CLOUD_DIR/commands/"

# 复制设置
cp ~/.claude/settings.json "$CLOUD_DIR/"

同步脚本

#!/bin/bash
# sync-clawdbot.sh - 在设备间同步 ClawdBot 配置

SYNC_DIR="${CLAWDBOT_SYNC_DIR:-$HOME/Dropbox/ClawdBot}"
CLAUDE_DIR="$HOME/.claude"

sync_to_cloud() {
    echo "正在同步到云端..."
    mkdir -p "$SYNC_DIR"

    rsync -avz --delete "$CLAUDE_DIR/skills/" "$SYNC_DIR/skills/"
    rsync -avz --delete "$CLAUDE_DIR/commands/" "$SYNC_DIR/commands/"
    rsync -avz "$CLAUDE_DIR/mcp/" "$SYNC_DIR/mcp/" 2>/dev/null
    cp "$CLAUDE_DIR/settings.json" "$SYNC_DIR/" 2>/dev/null

    echo "同步完成!"
}

sync_from_cloud() {
    echo "正在从云端同步..."

    rsync -avz "$SYNC_DIR/skills/" "$CLAUDE_DIR/skills/"
    rsync -avz "$SYNC_DIR/commands/" "$CLAUDE_DIR/commands/"
    rsync -avz "$SYNC_DIR/mcp/" "$CLAUDE_DIR/mcp/" 2>/dev/null

    # 默认不覆盖本地设置
    if [ ! -f "$CLAUDE_DIR/settings.json" ]; then
        cp "$SYNC_DIR/settings.json" "$CLAUDE_DIR/" 2>/dev/null
    fi

    echo "同步完成!"
}

case "$1" in
    push) sync_to_cloud ;;
    pull) sync_from_cloud ;;
    *)
        echo "用法:$0 {push|pull}"
        echo "  push - 上传本地配置到云端"
        echo "  pull - 从云端下载配置到本地"
        ;;
esac

自动化备份

Cron 任务(Linux/Mac)

# 编辑 crontab
crontab -e

# 添加每日凌晨 2 点备份
0 2 * * * /home/user/.local/bin/clawdbot-backup backup full

# 添加每周日清理
0 3 * * 0 /home/user/.local/bin/clawdbot-backup cleanup

# 添加每 6 小时自动 Git 提交
0 */6 * * * cd ~/.claude && git add . && git commit -m "自动备份 $(date +\%Y-\%m-\%d)" && git push 2>/dev/null

Systemd 定时器(Linux)

```bash

创建服务:~/.config/systemd/user/clawdbot-backup.service

cat > ~/.config/systemd/user/clawdbot-backup.service << 'EOF'
[Unit]
Description=ClawdBot 备份服务

[Service]
Type=oneshot
ExecStart=/home/user/.local/bin/clawdbot-backup backup full
EOF

创建定时器:~/.config

18 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 24 ms
Developed with Cursor