Files
my-project/config/openclaw/scripts/novel-learning/novel-sync.sh
T

219 lines
8.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# ============================================================================
# 程序名称: novel-sync.sh
# ============================================================================
# 功能描述: 平安书章节同步模块,自动同步章节文件、检查报告、反思记录到共享文件夹
# ============================================================================
# 设计目的:
# 1. 同步章节文件到共享文件夹
# 2. 同步检查报告到共享文件夹
# 3. 同步反思记录到共享文件夹
# 4. 创建远程目录结构
# 5. 验证同步结果
# ============================================================================
# 输入参数:
# $1: 章节文件名(可选,默认同步最新章节)
# ============================================================================
# 输出:
# 标准输出: 同步进度和结果
# ============================================================================
# 依赖:
# - smbclient
# - /root/.openclaw/workspace/平安书 目录
# - 共享文件夹: //192.168.0.99/temp1/doc/平安书
# ============================================================================
# 作者: 青龙 (OpenClaw AI)
# 创建时间: 2026-02-13
# 更新: 2026-02-15 v1.2 修复反思记录同步
# ============================================================================
SHARE_DIR="//192.168.0.99/temp1"
REMOTE_DIR="doc/平安书"
LOCAL_DIR="/root/.openclaw/workspace/平安书"
REPORT_DIR="$LOCAL_DIR/报告"
REFLECTION_DIR="$LOCAL_DIR/反思记录"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M')
# ============================================================================
# 同步函数
# ============================================================================
sync_chapter() {
local chapter="$1"
local chapter_name=$(basename "$chapter")
local base_name=$(basename "$chapter" .txt)
local report="${chapter%.txt}-检查报告.md"
local reflection="${REFLECTION_DIR}/${base_name}-反思.md"
echo "╔════════════════════════════════════════════════════╗"
echo "║ 平安书章节同步模块 v1.2 ║"
echo "╚════════════════════════════════════════════════════╝"
echo ""
# 检查章节文件是否存在
if [ ! -f "$chapter" ]; then
echo "❌ 错误:章节文件不存在: $chapter"
return 1
fi
echo "📤 同步章节: $chapter_name"
echo "📁 目标: $SHARE_DIR/$REMOTE_DIR/"
echo ""
# 创建远程目录
smbclient "$SHARE_DIR" -N -c "mkdir $REMOTE_DIR" 2>/dev/null
smbclient "$SHARE_DIR" -N -c "mkdir $REMOTE_DIR/报告" 2>/dev/null
smbclient "$SHARE_DIR" -N -c "mkdir $REMOTE_DIR/反思记录" 2>/dev/null
# 1. 同步章节文件
echo "1. 同步章节文件..."
smbclient "$SHARE_DIR" -N -c "put $chapter $REMOTE_DIR/$chapter_name" 2>/dev/null
if [ $? -eq 0 ]; then
echo " ✅ 章节已同步"
else
echo " ❌ 章节同步失败"
return 1
fi
# 2. 同步检查报告
if [ -f "$report" ]; then
echo ""
echo "2. 同步检查报告..."
local report_name=$(basename "$report")
smbclient "$SHARE_DIR" -N -c "put $report $REMOTE_DIR/报告/$report_name" 2>/dev/null
if [ $? -eq 0 ]; then
echo " ✅ 报告已同步"
else
echo " ⚠️ 报告同步失败(章节已成功)"
fi
else
echo ""
echo " ℹ️ 无检查报告"
fi
# 3. 同步反思记录
if [ -f "$reflection" ]; then
echo ""
echo "3. 同步反思记录..."
local reflection_name=$(basename "$reflection")
smbclient "$SHARE_DIR" -N -c "put $reflection $REMOTE_DIR/反思记录/$reflection_name" 2>/dev/null
if [ $? -eq 0 ]; then
echo " ✅ 反思已同步"
else
echo " ⚠️ 反思同步失败(章节已成功)"
fi
else
echo ""
echo " ℹ️ 无反思记录"
fi
echo ""
echo "📋 同步完成,状态:待发表"
echo "📝 请手动发表后,通知我标记为「已发表」"
return 0
}
# ============================================================================
# 同步所有报告(反思、检查、进度)
# ============================================================================
sync_all_reports() {
echo "╔════════════════════════════════════════════════════╗"
echo "║ 报告同步模块 v1.0 ║"
echo "╚════════════════════════════════════════════════════════════╝"
echo ""
# 创建远程目录
smbclient "$SHARE_DIR" -N -c "mkdir $REMOTE_DIR/报告" 2>/dev/null
smbclient "$SHARE_DIR" -N -c "mkdir $REMOTE_DIR/反思记录" 2>/dev/null
smbclient "$SHARE_DIR" -N -c "mkdir $REMOTE_DIR/进度追踪" 2>/dev/null
# 同步检查报告
echo "📄 同步检查报告..."
local report_count=0
for report in "$REPORT_DIR"/*.md; do
if [ -f "$report" ]; then
local name=$(basename "$report")
smbclient "$SHARE_DIR" -N -c "put $report $REMOTE_DIR/报告/$name" 2>/dev/null
if [ $? -eq 0 ]; then
report_count=$((report_count + 1))
fi
fi
done
echo " ✅ 同步 $report_count 个检查报告"
# 同步反思记录
echo ""
echo "🧠 同步反思记录..."
local reflection_count=0
for reflection in "$REFLECTION_DIR"/*.md; do
if [ -f "$reflection" ]; then
local name=$(basename "$reflection")
smbclient "$SHARE_DIR" -N -c "put $reflection $REMOTE_DIR/反思记录/$name" 2>/dev/null
if [ $? -eq 0 ]; then
reflection_count=$((reflection_count + 1))
fi
fi
done
echo " ✅ 同步 $reflection_count 个反思记录"
# 同步进度报告
echo ""
echo "📈 同步进度追踪..."
local progress_count=0
for progress in "$LOCAL_DIR/进度追踪"/*.md; do
if [ -f "$progress" ]; then
local name=$(basename "$progress")
smbclient "$SHARE_DIR" -N -c "put $progress $REMOTE_DIR/进度追踪/$name" 2>/dev/null
if [ $? -eq 0 ]; then
progress_count=$((progress_count + 1))
fi
fi
done
echo " ✅ 同步 $progress_count 个进度报告"
echo ""
echo "✅ 报告同步完成"
}
# ============================================================================
# 主程序
# ============================================================================
main() {
case "${1:-chapter}" in
chapter)
if [ -z "$2" ]; then
# 默认同步最新章节
local latest=$(ls -t "$LOCAL_DIR"/第*章_*.txt 2>/dev/null | head -1)
if [ -z "$latest" ]; then
echo "ℹ️ 未发现章节文件"
exit 1
fi
sync_chapter "$latest"
else
sync_chapter "$LOCAL_DIR/$2"
fi
;;
all)
sync_all_reports
;;
help|--help|-h)
echo "用法: $0 {chapter [章节名]|all|help}"
echo ""
echo "命令:"
echo " chapter [章节名] 同步章节(默认最新)"
echo " all 同步所有报告"
echo " help 显示帮助"
;;
*)
echo "未知命令: $1"
echo "使用: $0 help 查看帮助"
;;
esac
}
main "$@"