Workspace Zip Backup
OpenClaw workspace 核心 markdown 文件快速压缩备份与还原工具,只备份 .md 文件并保持文件夹结构 | Fast backup & restore tool for OpenClaw workspace core markdown files, preserves directory structure
安装 / 下载方式
TotalClaw CLI推荐
totalclaw install skilldb:roryyu~workspace-zip-backupcURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/skilldb%3Aroryyu~workspace-zip-backup/file -o workspace-zip-backup.mdGit 仓库获取源码
git clone https://github.com/openclaw/skills/commit/0d0abfb45b68fa6fa73f318f5efc96574f38fff7# Workspace Backup Skill | Workspace 备份技能
OpenClaw workspace 核心文件快速备份技能。只压缩备份所有 markdown 文件(核心笔记、技能文档、记忆文件等),保持原始文件夹结构,便于迁移和还原。
Fast backup tool for OpenClaw workspace core files. Only compress markdown files (notes, skill docs, memory files) while preserving original directory structure for migration and restore.
## Features | 功能特点
- 🎯 **Only core content | 只备份核心内容** - Only `.md` files are included, ignores binaries, node_modules, build outputs
仅搜索并压缩所有 `.md` 文件,忽略二进制文件、node_modules、构建输出等
- 📁 **Preserve directory structure | 保持文件夹结构** - Full directory structure is kept in zip, automatically restored on unzip
压缩包保留完整目录结构,解压后自动还原
- ⚡ **Fast compression | 快速压缩** - Based on `zip` command, high performance
基于 `zip` 命令,压缩速度快
- 🔄 **Complete restore | 完整还原** - Just unzip to recover all files and structure
解压即可恢复所有文件和目录结构
## Use Cases | 使用场景
- Migrate workspace to new machine | 迁移 workspace 到新机器
- Regular backup of core notes and skills | 定期备份核心笔记和技能
- Share your skills and notes with others | 分享你的技能和笔记给他人
- Slim down backup before transfer | 传输前瘦身备份,只保留文本内容
## Backup Script `backup-workspace.sh` | 备份脚本
### Script Code | 脚本代码
```bash
#!/bin/bash
# workspace-backup - Backup all markdown files from OpenClaw workspace keeping directory structure
# workspace-backup - 备份 OpenClaw workspace 中所有 markdown 文件,保持目录结构
set -euo pipefail
# Default configuration | 默认配置
SOURCE_DIR="${1:-$HOME/.openclaw/workspace}" # Source directory | 源文件夹,默认: ~/.openclaw/workspace
OUTPUT_ZIP="${2:-workspace-backup-$(date +%Y%m%d).zip}" # Output zip file | 输出zip文件,默认按日期命名
show_help() {
echo "Usage | 用法: ./backup-workspace.sh [source_dir] [output_zip]"
echo ""
echo "Parameters | 参数:"
echo " source_dir Directory to backup (default: ~/.openclaw/workspace)"
echo " 要备份的文件夹 (默认: ~/.openclaw/workspace)"
echo " output_zip Output zip file path (default: workspace-backup-YYYYMMDD.zip)"
echo " 输出压缩包路径 (默认: workspace-backup-YYYYMMDD.zip)"
echo ""
echo "Examples | 示例:"
echo " ./backup-workspace.sh"
echo " Backup default workspace to date-named zip"
echo " 备份默认workspace到当前日期压缩包"
echo " ./backup-workspace.sh ~/my-notes my-notes-backup.zip"
echo " Backup specified directory"
echo " 备份指定文件夹"
exit 1
}
# Check for help | 检查帮助参数
if [ "$#" -ge 1 ] && [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
show_help
fi
# Check source directory exists | 检查源文件夹是否存在
if [ ! -d "$SOURCE_DIR" ]; then
echo "Error | 错误: Source directory '$SOURCE_DIR' does not exist or is not a directory"
echo " 源文件夹 '$SOURCE_DIR' 不存在或不是目录"
exit 1
fi
echo "====== Workspace Markdown Backup ======"
echo "Source Directory | 源文件夹: $SOURCE_DIR"
echo "Output File | 输出文件: $OUTPUT_ZIP"
echo ""
echo "Searching for all .md files... | 正在搜索所有 .md 文件..."
# Count markdown files | 统计markdown文件数量
MD_COUNT=$(find "$SOURCE_DIR" -type f -name "*.md" | wc -l)
if [ "$MD_COUNT" -eq 0 ]; then
echo "No .md files found, exiting. | 未找到任何 .md 文件,退出"
exit 0
fi
echo "Found $MD_COUNT .md files, starting compression... | 找到 $MD_COUNT 个 .md 文件,开始压缩..."
echo ""
# Compress using zip, keep directory structure | 使用zip压缩,保持目录结构
find "$SOURCE_DIR" -type f -name "*.md" | xargs zip -r "$OUTPUT_ZIP"
echo ""
echo "✅ Backup completed! | 备份完成!"
echo "Archive | 压缩包: $OUTPUT_ZIP"
echo "Contains $MD_COUNT .md files, original directory structure preserved. | 包含 $MD_COUNT 个 .md 文件,保持原始文件夹结构"
# Show compressed size | 显示压缩后大小
SIZE=$(du -h "$OUTPUT_ZIP" | cut -f1)
echo "Compressed size | 压缩后大小: $SIZE"
```
### Usage | 使用方式
When needed, copy the script code above to a file:
需要使用时,复制上面的脚本代码保存为文件即可:
```bash
# Copy script code from this SKILL.md | 复制本文件中备份脚本代码块内容
cat > backup-workspace << 'EOF'
[paste script code here | 在这里粘贴脚本代码]
EOF
chmod +x backup-workspace
mv backup-workspace ~/.local/bin/
```
## Restore Script `restore-workspace.sh` | 还原脚本
### Script Code | 脚本代码
```bash
#!/bin/bash
# workspace-restore - Restore markdown files from backup zip
# workspace-restore - 从备份压缩包还原 markdown 文件
set -euo pipefail
# Default configuration | 默认配置
BACKUP_ZIP="${1:-}" # Backup zip file | 备份zip文件,必填
TARGET_DIR="${2:-$HOME/.openclaw/workspace}" # Target directory | 目标文件夹,默认: ~/.openclaw/workspace
show_help() {
echo "Usage | 用法: ./restore-workspace.sh <backup_zip> [target_dir]"
echo ""
echo "Parameters | 参数:"
echo " backup_zip Backup zip file to restore (required)"
echo " 要还原的压缩包 (必填)"
echo " target_dir Directory to restore to (default: ~/.openclaw/workspace)"
echo " 还原到哪个文件夹 (默认: ~/.openclaw/workspace)"
echo ""
echo "Examples | 示例:"
echo " ./restore-workspace.sh workspace-backup-20260316.zip"
echo " Restore to default workspace"
echo " 还原到默认workspace"
echo " ./restore-workspace.sh my-notes-backup.zip ~/new-workspace"
echo " Restore to specified location"
echo " 还原到指定位置"
exit 1
}
# Check for help | 检查帮助参数
if [ "$#" -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
show_help
fi
# Check backup file exists | 检查备份文件是否存在
if [ ! -f "$BACKUP_ZIP" ]; then
echo "Error | 错误: Backup file '$BACKUP_ZIP' does not exist"
echo " 备份文件 '$BACKUP_ZIP' 不存在"
exit 1
fi
# Check target directory | 检查目标文件夹
if [ ! -d "$TARGET_DIR" ]; then
echo "Target directory '$TARGET_DIR' does not exist, creating... | 目标文件夹 '$TARGET_DIR' 不存在,创建它..."
mkdir -p "$TARGET_DIR"
fi
echo "====== Workspace Markdown Restore ======"
echo "Backup File | 备份文件: $BACKUP_ZIP"
echo "Target Directory | 目标文件夹: $TARGET_DIR"
echo ""
echo "Listing archive contents... | 正在列出压缩包内容..."
echo ""
# List contents before restoring | 还原前列出内容供用户确认
unzip -l "$BACKUP_ZIP"
echo ""
echo "Continue restore? (y/N) | 是否继续还原? (y/N)"
read -r CONFIRM || CONFIRM="N"
if [ "$CONFIRM" != "y" ] && [ "$CONFIRM" != "Y" ]; then
echo "Cancelled. | 已取消"
exit 0
fi
echo ""
echo "Starting restore... | 开始还原..."
echo ""
# Restore with unzip - extracts to correct directory structure automatically
# 使用unzip还原 - 自动解压到正确的目录结构
unzip -o "$BACKUP_ZIP"
echo ""
echo "✅ Restore completed! | 还原完成!"
echo "All files restored with original directory structure. | 所有文件已还原,保持原始文件夹结构"
# Count restored files | 统计还原文件数量
RESTORED_COUNT=$(unzip -l "$BACKUP_ZIP" | grep -c "\.md$")
echo "Total $RESTORED_COUNT .md files restored. | 共还原 $RESTORED_COUNT 个 .md 文件"
```
### Usage | 使用方式
When needed, copy the script code above to a file:
需要使用时,复制上面的脚本代码保存为文件即可:
```bash
# Copy script code from this SKILL.md | 复制本文件中还原脚本代码块内容
cat > restore-workspace << 'EOF'
[paste script code here | 在这里粘贴脚本代码]
EOF
chmod +x restore-workspace
mv restore-workspace ~/.local/bin/
```
## Working Principle | 工作原理
### Backup Logic | 备份逻辑
1. **Parameter parsing | 参数解析** - Accepts source directory and output path, provides defaults
接受源文件夹和输出文件路径,提供默认值
2. **File search | 文件搜索** - Recursively search all markdown files using `find <dir> -type f -name "*.md"`
使用 `find <dir> -type f -name "*.md"` 递归搜索所有 markdown 文件
3. **Count check | 数量检查** - Exit early if no markdown files found
如果没有找到 md 文件提前退出
4. **Compression | 压缩打包** - Pass found files to `zip -r` via `xargs`, zip automatically preserves directory structure
通过 `xargs` 将找到的文件传给 `zip -r`,zip 自动保持相对路径结构
5. **Summary output | 统计输出** - Show compressed size and file count
显示压缩包大小和文件数量
### Restore Logic | 还原逻辑
1. **Parameter check | 参数检查** - Verify backup file exists, create target directory if not exists
验证备份文件存在,创建目标文件夹(如果不存在)
2. **Preview content | 预览内容** - List archive contents with `unzip -l` for user confirmation
还原前用 `unzip -l` 列出压缩包内容,让用户确认
3. **User confirmation | 用户确认** - Requires `y` confirmation before restoring to prevent accidental operation
需要用户输入 `y` 确认才开始