OpenClaw 自动备份技能 此技能帮助你自动备份OpenClaw的核心配置、技能源码和记忆数据到挂载的TOS网盘,按日期创建备份目录,自动跳过依赖目录和大体积可执行文件。 何时使用 当用户要求执行以下操作时使用此技能: - "备份OpenClaw配置" - "备份技能文件" - "备份到网盘" - "创建系统备份" - "定期备份" 备份策略 备份内容 1. 核心配置文件 :工作区根目录下所有MD文档(AGENTS.md, SOUL.md, USER.md等) 2. 系统配置 : 目录下的JSON/YAML/ENV/conf等配置文件,跳过二进制文件 3. 技能文件 :扩展技能和工作区技能的源码文件(JS/TS/PY/MD/JSON/YAML/SH),自动跳过以下目录: - - - - - 4. 记忆数据 : 目录下的所有记忆文件 存储结构 指令 1. 执行完整备份 运行备份脚本自动完成所有备份操作: 输出示例: 2. 配置默认存储桶 固定使用某个存储桶进行备份: 示例: 3. 检查备份历史 列出所有已创建的备份: 输出示例: 4. 恢复备份 从指定日期的备份恢复系统: 预览恢复(不实际修改文件): 输出示例: 3. 反馈格式 向用户反馈备份结果时使用以下格式: "✅ 备份已成功完成! ### 📦 备份详情 - 存储桶 : my-bucket - 备份路径 : - 备份文件…

| wc -l)\n if [ \"$root_count\" -gt 0 ]; then\n echo \"$root_configs\" | xargs cp -t \"$BACKUP_DIR/config/\"\n config_count=$((config_count + root_count))\n fi\n \n # 遍历所有子目录,智能备份\n echo \"🔍 扫描系统配置子目录...\"\n for dir in \"$CONFIG_DIR\"/*/; do\n dir_name=$(basename \"$dir\")\n # 跳过不需要备份的大体积目录\n if [[ \"$dir_name\" == \"node_modules\" || \"$dir_name\" == \"venv\" || \"$dir_name\" == \"__pycache__\" || \"$dir_name\" == \"dist\" || \"$dir_name\" == \"build\" || \"$dir_name\" == \"logs\" || \"$dir_name\" == \"workspace\" ]]; then\n echo \"⚠️ 跳过目录: $dir_name (排除列表)\"\n continue\n fi\n \n # 计算目录大小和文件数\n dir_size=$(du -sh \"$dir\" | cut -f1)\n file_count=$(find \"$dir\" -type f | wc -l)\n \n # 智能判断是否备份:小于100MB且文件数少于1000个\n size_num=$(echo \"$dir_size\" | sed 's/[MKG]//')\n size_unit=$(echo \"$dir_size\" | sed 's/[0-9.]//g')\n \n skip=false\n if [[ \"$size_unit\" == \"G\" ]]; then\n skip=true\n elif [[ \"$size_unit\" == \"M\" && $(echo \"$size_num > 100\" | bc -l) -eq 1 ]]; then\n skip=true\n elif [[ \"$file_count\" -gt 1000 ]]; then\n skip=true\n fi\n \n if [ \"$skip\" = true ]; then\n echo \"⚠️ 跳过目录: $dir_name (大小: $dir_size, 文件数: $file_count - 超过阈值)\"\n continue\n fi\n \n # 备份目录\n echo \"✅ 备份目录: $dir_name (大小: $dir_size, 文件数: $file_count)\"\n mkdir -p \"$BACKUP_DIR/config/$dir_name\"\n cp -r \"$dir\"/* \"$BACKUP_DIR/config/$dir_name/\" 2>/dev/null\n config_count=$((config_count + file_count))\n done\n \n if [ \"$config_count\" -gt 0 ]; then\n echo \"✅ 系统配置备份完成 ($config_count 个文件)\"\n else\n echo \"ℹ️ 无系统配置文件需要备份\"\n fi\nelse\n echo \"ℹ️ 系统配置目录不存在,跳过系统配置备份\"\nfi\n\n# 备份技能文件\necho -e \"\\n🔧 备份技能文件 (仅源码文件,跳过node_modules等依赖目录)...\"\nmkdir -p \"$BACKUP_DIR/skills/extensions\"\nmkdir -p \"$BACKUP_DIR/skills/workspace\"\n\n# 备份扩展技能\nfind \"$EXTENSIONS_DIR\" -type f \\( -name \"*.js\" -o -name \"*.ts\" -o -name \"*.py\" -o -name \"*.md\" -o -name \"*.json\" -o -name \"*.yaml\" -o -name \"*.yml\" -o -name \"*.sh\" -o -name \"*.html\" -o -name \"*.css\" \\) \\\n -not -path \"*/node_modules/*\" \\\n -not -path \"*/venv/*\" \\\n -not -path \"*/__pycache__/*\" \\\n -not -path \"*/dist/*\" \\\n -not -path \"*/build/*\" \\\n -not -path \"*/.git/*\" \\\n -exec cp --parents {} \"$BACKUP_DIR/skills/extensions/\" \\; 2>/dev/null\n\n# 备份工作区技能\nfind \"$SKILLS_DIR\" -type f \\( -name \"*.js\" -o -name \"*.ts\" -o -name \"*.py\" -o -name \"*.md\" -o -name \"*.json\" -o -name \"*.yaml\" -o -name \"*.yml\" -o -name \"*.sh\" -o -name \"*.html\" -o -name \"*.css\" \\) \\\n -not -path \"*/node_modules/*\" \\\n -not -path \"*/venv/*\" \\\n -not -path \"*/__pycache__/*\" \\\n -not -path \"*/dist/*\" \\\n -not -path \"*/build/*\" \\\n -not -path \"*/.git/*\" \\\n -exec cp --parents {} \"$BACKUP_DIR/skills/workspace/\" \\; 2>/dev/null\n\necho \"✅ 技能文件备份完成\"\n\n# 备份记忆数据\necho -e \"\\n🧠 备份记忆数据...\"\nmkdir -p \"$BACKUP_DIR/memory\"\nif [ -d \"$MEMORY_DIR\" ]; then\n cp -r \"$MEMORY_DIR\"/* \"$BACKUP_DIR/memory/\" 2>/dev/null || echo \"ℹ️ 无记忆数据需要备份\"\nelse\n echo \"ℹ️ 记忆目录不存在,跳过记忆数据备份\"\nfi\necho \"✅ 记忆数据备份完成\"\n\n# 生成备份统计\necho -e \"\\n📊 生成备份统计...\"\nBACKUP_SIZE=$(du -sh \"$BACKUP_DIR\" 2>/dev/null | cut -f1 || echo \"计算中\")\nFILE_COUNT=$(find \"$BACKUP_DIR\" -type f 2>/dev/null | wc -l || echo \"0\")\n\n# 生成备份摘要\nSUMMARY_PATH=\"$BACKUP_DIR/backup_summary.txt\"\ncat > \"$SUMMARY_PATH\" \u003c\u003c EOF\n✅ 备份完成!\n📦 备份桶: $BUCKET_NAME\n📂 备份路径: $BACKUP_ROOT/$DATE\n📄 备份文件数: $FILE_COUNT\n💾 总大小: $BACKUP_SIZE\n📅 备份时间: $(date '+%Y-%m-%d %H:%M:%S')\nEOF\n\n# 生成完整文件清单\nMANIFEST_PATH=\"$BACKUP_DIR/backup_manifest.txt\"\nfind \"$BACKUP_DIR\" -type f -exec ls -lh {} \\; > \"$MANIFEST_PATH\" 2>/dev/null || true\n\n# 输出结果\necho -e \"\\n✅ 备份完成!\"\necho \"📦 备份桶: $BUCKET_NAME\"\necho \"📂 备份路径: $BACKUP_ROOT/$DATE\"\necho \"📄 备份文件数: $FILE_COUNT\"\necho \"💾 总大小: $BACKUP_SIZE\"\necho -e \"\\n📋 备份摘要已保存到: backup_summary.txt\"\necho \"📑 完整文件清单已保存到: backup_manifest.txt\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":8196,"content_sha256":"e34a769a4073b4426d967d41d869d43cedd90fc78d094477f866f011b2f74384"},{"filename":"scripts/config.sh","content":"#!/bin/bash\n\n# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# 配置备份存储桶\n# 用法: bash scripts/config.sh \u003c存储桶名称>\n\nset -euo pipefail\n\nMOUNT_ROOT=\"/root/.openclaw/workspace\"\nCONFIG_FILE=\"$(dirname \"$0\")/../.config\"\n\nif [ $# -ne 1 ]; then\n echo \"用法: bash scripts/config.sh \u003c存储桶名称>\"\n echo \"\"\n echo \"可用存储桶:\"\n df -P | grep \"$MOUNT_ROOT\" | awk '{print \" - \" $NF}' | xargs basename\n exit 1\nfi\n\nTARGET_BUCKET=\"$1\"\n\n# 检查存储桶是否存在\nMOUNT_POINT=$(df -P | grep \"$MOUNT_ROOT\" | awk '{print $NF}' | grep -E \"/$TARGET_BUCKET$\" | head -n 1)\n\nif [ -z \"$MOUNT_POINT\" ]; then\n echo \"❌ 存储桶 '$TARGET_BUCKET' 不存在或未挂载\"\n echo \"可用存储桶:\"\n df -P | grep \"$MOUNT_ROOT\" | awk '{print \" - \" $NF}' | xargs basename\n exit 1\nfi\n\n# 保存配置\necho \"DEFAULT_BUCKET=\\\"$TARGET_BUCKET\\\"\" > \"$CONFIG_FILE\"\necho \"MOUNT_POINT=\\\"$MOUNT_POINT\\\"\" >> \"$CONFIG_FILE\"\n\necho \"✅ 备份存储桶已配置为: $TARGET_BUCKET\"\necho \"📂 挂载路径: $MOUNT_POINT\"\necho \"ℹ️ 后续备份将自动使用此存储桶\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":1680,"content_sha256":"4a10b6476cc5b9d02371e5ae6085e4f07e7ba5ced7a174b9cd0730f97e521a50"},{"filename":"scripts/list_backups.sh","content":"#!/bin/bash\n\n# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# 列出所有备份记录\n\nset -e\n\nWORKSPACE_DIR=\"/root/.openclaw/workspace\"\nBACKUP_ROOT=\"openclaw_backup\"\n\n# 检测挂载的网盘\nMOUNT_ROOT=\"/root/.openclaw/workspace\"\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nCONFIG_FILE=\"$SCRIPT_DIR/../.config\"\n\n# 读取配置文件(如果存在)\nif [ -f \"$CONFIG_FILE\" ]; then\n source \"$CONFIG_FILE\"\n if [ -n \"${DEFAULT_BUCKET:-}\" ] && [ -n \"${MOUNT_POINT:-}\" ]; then\n # 验证配置的挂载点是否仍然有效\n if df -P | grep -q \"^.* $MOUNT_POINT$\"; then\n BUCKET_NAME=\"$DEFAULT_BUCKET\"\n echo \"✅ 使用配置的默认存储桶: $BUCKET_NAME ($MOUNT_POINT)\"\n else\n echo \"⚠️ 配置的存储桶 $DEFAULT_BUCKET 已失效,重新检测可用存储桶\"\n unset DEFAULT_BUCKET\n unset MOUNT_POINT\n fi\n fi\nfi\n\n# 如果没有有效的配置,自动检测\nif [ -z \"${MOUNT_POINT:-}\" ]; then\n # 检测所有挂载的网盘\n mounts=$(df -P | grep \"$MOUNT_ROOT\" | awk '{print $NF}')\n\n if [ -z \"$mounts\" ]; then\n echo \"❌ 未检测到挂载的网盘,请先在arkClaw界面配置TOS存储桶\"\n exit 1\n fi\n\n # 选择第一个可用的挂载点\n MOUNT_POINT=$(echo \"$mounts\" | head -n 1)\n BUCKET_NAME=$(basename \"$MOUNT_POINT\")\nfi\n\nBACKUP_BASE=\"$MOUNT_POINT/$BACKUP_ROOT\"\n\nif [ ! -d \"$BACKUP_BASE\" ]; then\n echo \"ℹ️ 暂无备份记录\"\n exit 0\nfi\n\necho \"📋 现有备份列表 (存储桶: $BUCKET_NAME):\"\necho \"=====================================\"\n\nfor backup_dir in \"$BACKUP_BASE\"/*/; do\n if [ -d \"$backup_dir\" ]; then\n date_name=$(basename \"$backup_dir\")\n if [ -f \"$backup_dir/backup_summary.txt\" ]; then\n file_count=$(grep \"备份文件数\" \"$backup_dir/backup_summary.txt\" | awk '{print $4}')\n size=$(grep \"总大小\" \"$backup_dir/backup_summary.txt\" | awk '{print $4}')\n echo \"📅 $date_name ($file_count files, $size)\"\n else\n file_count=$(find \"$backup_dir\" -type f | wc -l)\n size=$(du -sh \"$backup_dir\" | cut -f1)\n echo \"📅 $date_name ($file_count files, $size)\"\n fi\n fi\ndone\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":2835,"content_sha256":"4a8b35830f25010dfbdb43fc7e92baff59fb452e96890ea90f3c036928916897"},{"filename":"scripts/restore.sh","content":"#!/bin/bash\n\n# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# 恢复备份脚本\n# 用法: bash scripts/restore.sh \u003c备份日期> [--dry-run]\n\nset -euo pipefail\n\nMOUNT_ROOT=\"/root/.openclaw/workspace\"\nBACKUP_ROOT=\"openclaw_backup\"\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nCONFIG_FILE=\"$SCRIPT_DIR/../.config\"\nDRY_RUN=false\n\nif [ $# -lt 1 ]; then\n echo \"用法: bash scripts/restore.sh \u003c备份日期> [--dry-run]\"\n echo \"\"\n echo \"示例:\"\n echo \" bash scripts/restore.sh 2026-03-11 # 恢复2026-03-11的备份\"\n echo \" bash scripts/restore.sh 2026-03-11 --dry-run # 预览恢复操作,不实际执行\"\n echo \"\"\n echo \"可用备份:\"\n bash \"$SCRIPT_DIR/list_backups.sh\"\n exit 1\nfi\n\nBACKUP_DATE=\"$1\"\nif [ $# -eq 2 ] && [ \"$2\" = \"--dry-run\" ]; then\n DRY_RUN=true\n echo \"🔍 预览模式:不会实际修改文件\"\nfi\n\n# 读取配置文件(如果存在)\nif [ -f \"$CONFIG_FILE\" ]; then\n source \"$CONFIG_FILE\"\n if [ -n \"${DEFAULT_BUCKET:-}\" ] && [ -n \"${MOUNT_POINT:-}\" ]; then\n # 验证配置的挂载点是否仍然有效\n if df -P | grep -q \"^.* $MOUNT_POINT$\"; then\n BUCKET_NAME=\"$DEFAULT_BUCKET\"\n echo \"✅ 使用配置的默认存储桶: $BUCKET_NAME ($MOUNT_POINT)\"\n else\n echo \"⚠️ 配置的存储桶 $DEFAULT_BUCKET 已失效,重新检测可用存储桶\"\n unset DEFAULT_BUCKET\n unset MOUNT_POINT\n fi\n fi\nfi\n\n# 如果没有有效的配置,自动检测\nif [ -z \"${MOUNT_POINT:-}\" ]; then\n # 检测所有挂载的网盘\n mounts=$(df -P | grep \"$MOUNT_ROOT\" | awk '{print $NF}')\n\n if [ -z \"$mounts\" ]; then\n echo \"❌ 未检测到挂载的网盘,请先在arkClaw界面配置TOS存储桶\"\n exit 1\n fi\n\n # 选择第一个可用的挂载点\n MOUNT_POINT=$(echo \"$mounts\" | head -n 1)\n BUCKET_NAME=$(basename \"$MOUNT_POINT\")\n echo \"✅ 自动选择存储桶: $BUCKET_NAME ($MOUNT_POINT)\"\nfi\n\nBACKUP_DIR=\"$MOUNT_POINT/$BACKUP_ROOT/$BACKUP_DATE\"\n\nif [ ! -d \"$BACKUP_DIR\" ]; then\n echo \"❌ 备份 $BACKUP_DATE 不存在\"\n echo \"可用备份:\"\n bash \"$SCRIPT_DIR/list_backups.sh\"\n exit 1\nfi\n\necho \"📂 准备恢复备份: $BACKUP_DATE\"\necho \"📦 存储桶: $BUCKET_NAME\"\necho \"📂 备份路径: $BACKUP_DIR\"\n\nif [ \"$DRY_RUN\" = true ]; then\n echo \"\"\n echo \"🔍 预览恢复操作:\"\n echo \" - 恢复核心配置文件到: /root/.openclaw/workspace/\"\n echo \" - 恢复系统配置到: /root/.openclaw/\"\n echo \" - 恢复技能文件到: /root/.openclaw/extensions/ 和 /root/.openclaw/workspace/skills/\"\n echo \" - 恢复记忆数据到: /root/.openclaw/workspace/memory/\"\n echo \"\"\n echo \"📋 备份内容摘要:\"\n cat \"$BACKUP_DIR/backup_summary.txt\" 2>/dev/null || echo \" 无摘要信息\"\n exit 0\nfi\n\nread -p \"⚠️ 恢复操作会覆盖现有文件,确定要继续吗? (y/N) \" -n 1 -r\necho\nif [[ ! $REPLY =~ ^[Yy]$ ]]; then\n echo \"❌ 已取消恢复\"\n exit 1\nfi\n\necho \"\"\necho \"🔄 开始恢复...\"\n\n# 恢复核心配置文件\necho \"📝 恢复核心配置文件...\"\ncp \"$BACKUP_DIR\"/*.md /root/.openclaw/workspace/ 2>/dev/null || echo \"ℹ️ 无核心配置文件需要恢复\"\n\n# 恢复系统配置\necho \"⚙️ 恢复系统配置...\"\nif [ -d \"$BACKUP_DIR/config\" ]; then\n cp -r \"$BACKUP_DIR/config\"/* /root/.openclaw/ 2>/dev/null\n echo \"✅ 系统配置恢复完成\"\nelse\n echo \"ℹ️ 无系统配置需要恢复\"\nfi\n\n# 恢复技能文件\necho \"🔧 恢复技能文件...\"\nif [ -d \"$BACKUP_DIR/skills/extensions\" ]; then\n cp -r \"$BACKUP_DIR/skills/extensions/\"* /root/.openclaw/extensions/ 2>/dev/null\nfi\nif [ -d \"$BACKUP_DIR/skills/workspace\" ]; then\n cp -r \"$BACKUP_DIR/skills/workspace/\"* /root/.openclaw/workspace/skills/ 2>/dev/null\nfi\necho \"✅ 技能文件恢复完成\"\n\n# 恢复记忆数据\necho \"🧠 恢复记忆数据...\"\nif [ -d \"$BACKUP_DIR/memory\" ]; then\n mkdir -p /root/.openclaw/workspace/memory\n cp -r \"$BACKUP_DIR/memory\"/* /root/.openclaw/workspace/memory/ 2>/dev/null\n echo \"✅ 记忆数据恢复完成\"\nelse\n echo \"ℹ️ 无记忆数据需要恢复\"\nfi\n\necho \"\"\necho \"✅ 恢复完成!\"\necho \"📅 恢复的备份日期: $BACKUP_DATE\"\necho \"⚠️ 建议重启OpenClaw服务以应用所有配置\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":4908,"content_sha256":"b6cc7c761672db60fa5375f26d0492e69eb9340df137751317ab8f54e86a8077"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"OpenClaw 自动备份技能","type":"text"}]},{"type":"paragraph","content":[{"text":"此技能帮助你自动备份OpenClaw的核心配置、技能源码和记忆数据到挂载的TOS网盘,按日期创建备份目录,自动跳过依赖目录和大体积可执行文件。","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"何时使用","type":"text"}]},{"type":"paragraph","content":[{"text":"当用户要求执行以下操作时使用此技能:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"备份OpenClaw配置\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"备份技能文件\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"备份到网盘\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"创建系统备份\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"定期备份\"","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"备份策略","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"备份内容","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"核心配置文件","type":"text","marks":[{"type":"strong"}]},{"text":":工作区根目录下所有MD文档(AGENTS.md, SOUL.md, USER.md等)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"系统配置","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"},{"text":"/root/.openclaw/config/","type":"text","marks":[{"type":"code_inline"}]},{"text":"目录下的JSON/YAML/ENV/conf等配置文件,跳过二进制文件","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"技能文件","type":"text","marks":[{"type":"strong"}]},{"text":":扩展技能和工作区技能的源码文件(JS/TS/PY/MD/JSON/YAML/SH),自动跳过以下目录:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"node_modules/","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"venv/","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"__pycache__/","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"dist/","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"build/","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"记忆数据","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"},{"text":"/root/.openclaw/workspace/memory/","type":"text","marks":[{"type":"code_inline"}]},{"text":"目录下的所有记忆文件","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"存储结构","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"my-bucket/\n└── openclaw_backup/\n ├── 2026-03-11/\n │ ├── *.md # 核心配置文件\n │ ├── config/ # 系统配置\n │ ├── skills/\n │ │ ├── extensions/ # 扩展技能源码\n │ │ └── workspace/ # 工作区技能源码\n │ ├── memory/ # 记忆数据\n │ ├── backup_summary.txt # 备份统计信息\n │ └── backup_manifest.txt # 完整文件清单\n └── 2026-03-12/\n └── ...","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"指令","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"1. 执行完整备份","type":"text"}]},{"type":"paragraph","content":[{"text":"运行备份脚本自动完成所有备份操作:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"scripts/backup.sh","type":"text"}]},{"type":"paragraph","content":[{"text":"输出示例:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"text"},"content":[{"text":"🔍 检测可用网盘...\n✅ 自动选择存储桶: my-bucket (/root/.openclaw/workspace/my-bucket)\nℹ️ 所有可用存储桶:\n - my-bucket: /root/.openclaw/workspace/my-bucket\n💡 如需固定使用某个存储桶,请运行: bash scripts/config.sh \u003c存储桶名称>\n\n📂 创建备份目录: /root/.openclaw/workspace/my-bucket/openclaw_backup/2026-03-11\n\n📝 备份核心配置文件 (MD文档)...\n✅ 核心配置文件备份完成 (7 个文件)\n\n⚙️ 备份系统配置 (仅配置文件,跳过二进制)...\n🔍 扫描系统配置子目录...\n✅ 备份目录: agents (大小: 228K, 文件数: 5)\n✅ 备份目录: canvas (大小: 8.0K, 文件数: 1)\n✅ 备份目录: completions (大小: 460K, 文件数: 4)\n✅ 备份目录: cron (大小: 12K, 文件数: 2)\n⚠️ 跳过目录: extensions (大小: 2.4G, 文件数: 67554 - 超过阈值)\n✅ 备份目录: identity (大小: 8.0K, 文件数: 1)\n⚠️ 跳过目录: logs (排除列表)\n✅ 备份目录: memory (大小: 44K, 文件数: 5)\n⚠️ 跳过目录: workspace (排除列表)\n✅ 系统配置备份完成 (21 个文件)\n\n🔧 备份技能文件 (仅源码文件,跳过node_modules等依赖目录)...\n✅ 技能文件备份完成\n\n🧠 备份记忆数据...\nℹ️ 记忆目录不存在,跳过记忆数据备份\n✅ 记忆数据备份完成\n\n📊 生成备份统计...\n\n✅ 备份完成!\n📦 备份桶: my-bucket\n📂 备份路径: openclaw_backup/2026-03-11\n📄 备份文件数: 463\n💾 总大小: 3.6M\n\n📋 备份摘要已保存到: backup_summary.txt\n📑 完整文件清单已保存到: backup_manifest.txt","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"2. 配置默认存储桶","type":"text"}]},{"type":"paragraph","content":[{"text":"固定使用某个存储桶进行备份:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"scripts/config.sh \u003c存储桶名称>","type":"text"}]},{"type":"paragraph","content":[{"text":"示例:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"scripts/config.sh my-bucket","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"3. 检查备份历史","type":"text"}]},{"type":"paragraph","content":[{"text":"列出所有已创建的备份:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"scripts/list_backups.sh","type":"text"}]},{"type":"paragraph","content":[{"text":"输出示例:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"text"},"content":[{"text":"📋 现有备份列表 (存储桶: my-bucket):\n=====================================\n📅 2026-03-11 (463 files, 3.6M)\n📅 2026-03-10 (452 files, 3.4M)\n📅 2026-03-09 (441 files, 3.2M)","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"4. 恢复备份","type":"text"}]},{"type":"paragraph","content":[{"text":"从指定日期的备份恢复系统:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"scripts/restore.sh \u003c备份日期>","type":"text"}]},{"type":"paragraph","content":[{"text":"预览恢复(不实际修改文件):","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"scripts/restore.sh 2026-03-11 --dry-run","type":"text"}]},{"type":"paragraph","content":[{"text":"输出示例:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"text"},"content":[{"text":"✅ 自动选择存储桶: my-bucket (/root/.openclaw/workspace/my-bucket)\n📂 准备恢复备份: 2026-03-11\n📦 存储桶: my-bucket\n📂 备份路径: /root/.openclaw/workspace/my-bucket/openclaw_backup/2026-03-11\n\n⚠️ 恢复操作会覆盖现有文件,确定要继续吗? (y/N) y\n\n🔄 开始恢复...\n📝 恢复核心配置文件...\n⚙️ 恢复系统配置...\n✅ 系统配置恢复完成\n🔧 恢复技能文件...\n✅ 技能文件恢复完成\n🧠 恢复记忆数据...\n✅ 记忆数据恢复完成\n\n✅ 恢复完成!\n📅 恢复的备份日期: 2026-03-11\n⚠️ 建议重启OpenClaw服务以应用所有配置","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"3. 反馈格式","type":"text"}]},{"type":"paragraph","content":[{"text":"向用户反馈备份结果时使用以下格式:","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"\"✅ 备份已成功完成!","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"📦 备份详情","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"存储桶","type":"text","marks":[{"type":"strong"}]},{"text":": my-bucket","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"备份路径","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"openclaw_backup/2026-03-11/","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"备份文件数","type":"text","marks":[{"type":"strong"}]},{"text":": 15,076 个","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"总大小","type":"text","marks":[{"type":"strong"}]},{"text":": 922 MB","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"📋 备份内容包含:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"核心配置文件(工作区所有MD文档)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"系统配置(JSON/YAML/ENV等配置文件,跳过二进制文件)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"技能源码(JS/TS/PY/MD等源码文件,自动跳过依赖目录)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"记忆数据\"","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"注意事项","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"自动检测挂载的网盘,默认使用第一个检测到的存储桶","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"如果未检测到网盘,提示用户在arkClaw界面配置TOS存储桶","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"自动跳过可执行文件、依赖目录和大体积二进制文件","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"每次备份自动创建新的日期目录,不会覆盖历史备份","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"byted-tos-openclaw-backup","author":"@skillopedia","source":{"stars":345,"repo_name":"agentkit-samples","origin_url":"https://github.com/bytedance/agentkit-samples/blob/HEAD/skills/byted-tos-openclaw-backup/SKILL.md","repo_owner":"bytedance","body_sha256":"7b404ccfa847fe8808ab88b22d843afbaf578f2b3000ff68019a6dd9c6fe452b","cluster_key":"0ae4ccfbbc9442b21f7bfc304dca1cb19240f0af7b35db081e566e944605e66b","clean_bundle":{"format":"clean-skill-bundle-v1","source":"bytedance/agentkit-samples/skills/byted-tos-openclaw-backup/SKILL.md","attachments":[{"id":"a468e570-3c57-5743-b514-c2ab020bb447","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a468e570-3c57-5743-b514-c2ab020bb447/attachment.sh","path":"scripts/backup.sh","size":8196,"sha256":"e34a769a4073b4426d967d41d869d43cedd90fc78d094477f866f011b2f74384","contentType":"application/x-sh; charset=utf-8"},{"id":"ef8d1ffb-65e8-5960-b85a-0c6588c44e17","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ef8d1ffb-65e8-5960-b85a-0c6588c44e17/attachment.sh","path":"scripts/config.sh","size":1680,"sha256":"4a10b6476cc5b9d02371e5ae6085e4f07e7ba5ced7a174b9cd0730f97e521a50","contentType":"application/x-sh; charset=utf-8"},{"id":"02cd8182-1eab-5376-8198-89a7332076a9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/02cd8182-1eab-5376-8198-89a7332076a9/attachment.sh","path":"scripts/list_backups.sh","size":2835,"sha256":"4a8b35830f25010dfbdb43fc7e92baff59fb452e96890ea90f3c036928916897","contentType":"application/x-sh; charset=utf-8"},{"id":"eeaa2c8d-c704-55fc-a4dd-36fa7f7f392a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/eeaa2c8d-c704-55fc-a4dd-36fa7f7f392a/attachment.sh","path":"scripts/restore.sh","size":4908,"sha256":"b6cc7c761672db60fa5375f26d0492e69eb9340df137751317ab8f54e86a8077","contentType":"application/x-sh; charset=utf-8"}],"bundle_sha256":"592c0aca14d9b3cf463378ef363f0eddbc148c269af5ce583c346bbc5f225d76","attachment_count":4,"text_attachments":0,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":4,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"skills/byted-tos-openclaw-backup/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"general","category_label":"General"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"general","metadata":{"openclaw":{"emoji":"💾","requires":{"bins":["df","grep","find","du","awk","sed","bc"]}}},"import_tag":"clean-skills-v1","description":"自动备份OpenClaw核心配置、技能文件和记忆数据到挂载的TOS网盘,按日期分类存储,自动跳过依赖目录和可执行文件。当你需要创建或恢复OpenClaw环境备份时使用此技能。"}},"renderedAt":1782981768237}

OpenClaw 自动备份技能 此技能帮助你自动备份OpenClaw的核心配置、技能源码和记忆数据到挂载的TOS网盘,按日期创建备份目录,自动跳过依赖目录和大体积可执行文件。 何时使用 当用户要求执行以下操作时使用此技能: - "备份OpenClaw配置" - "备份技能文件" - "备份到网盘" - "创建系统备份" - "定期备份" 备份策略 备份内容 1. 核心配置文件 :工作区根目录下所有MD文档(AGENTS.md, SOUL.md, USER.md等) 2. 系统配置 : 目录下的JSON/YAML/ENV/conf等配置文件,跳过二进制文件 3. 技能文件 :扩展技能和工作区技能的源码文件(JS/TS/PY/MD/JSON/YAML/SH),自动跳过以下目录: - - - - - 4. 记忆数据 : 目录下的所有记忆文件 存储结构 指令 1. 执行完整备份 运行备份脚本自动完成所有备份操作: 输出示例: 2. 配置默认存储桶 固定使用某个存储桶进行备份: 示例: 3. 检查备份历史 列出所有已创建的备份: 输出示例: 4. 恢复备份 从指定日期的备份恢复系统: 预览恢复(不实际修改文件): 输出示例: 3. 反馈格式 向用户反馈备份结果时使用以下格式: "✅ 备份已成功完成! ### 📦 备份详情 - 存储桶 : my-bucket - 备份路径 : - 备份文件…