#!/bin/bash # 《末日重生:开局囤货十亿物资》自动同步管理器 # 作者:番茄小说创作助手 # 版本:1.0.0 set -e # 配置参数 NOVEL_DIR="/root/.openclaw/workspace/tomato-novel/books/末日重生-开局囤货十亿物资" SUMMARY_DIR="${NOVEL_DIR}/consolidated_summaries" GITEA_REPO="gitea" LOGFILE="${NOVEL_DIR}/sync_manager.log" QC_THRESHOLD=10 # 每10章同步一次 # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日志函数 log() { local level=$1 local message=$2 local timestamp=$(date '+%Y-%m-%d %H:%M:%S') echo -e "${timestamp} [${level}] ${message}" | tee -a "${LOGFILE}" if [[ "${level}" == "ERROR" ]]; then echo -e "${RED}${message}${NC}" elif [[ "${level}" == "WARN" ]]; then echo -e "${YELLOW}${message}${NC}" elif [[ "${level}" == "INFO" ]]; then echo -e "${GREEN}${message}${NC}" fi } # 检查章节数量 check_chapter_count() { local total_chapters=$(ls -1 "${NOVEL_DIR}/chapters"/*.md | wc -l) local last_chapter=$(ls -1 "${NOVEL_DIR}/chapters"/*.md | tail -1 | grep -o '[0-9][0-9][0-9][0-9]' | head -1) echo "章节统计:" echo " - 总章节数: ${total_chapters} 章" echo " - 最新章节: 第${last_chapter}章" # 计算是否需要同步(每10章) local sync_needed=$(( (${total_chapters} % ${QC_THRESHOLD}) == 0 ? 1 : 0 )) if [[ ${sync_needed} -eq 1 ]]; then log "INFO" "检测到章节数量为10的倍数,需要同步摘要报告" return 0 else log "INFO" "章节数量正常,未达到同步阈值" return 1 fi } # 监控修复章节完整性 monitor_fixed_chapters() { local fixed_chapters="0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014" local damaged_count=0 log "INFO" "开始监控修复章节完整性..." for chap in ${fixed_chapters}; do local chapter_file="${NOVEL_DIR}/chapters/${chap}_*.md" if [ -f "${chapter_file}" ]; then local file_size=$(stat -c%s "${chapter_file}" 2>/dev/null || stat -f%z "${chapter_file}") if [[ ${file_size} -lt 1024 ]]; then # 小于1KB log "WARN" "章节 ${chap} 文件过小: ${file_size} 字节" damaged_count=$((damaged_count+1)) elif [[ ${file_size} -eq 0 ]]; then log "ERROR" "章节 ${chap} 文件为空!" damaged_count=$((damaged_count+1)) fi else log "ERROR" "章节 ${chap} 文件丢失!" damaged_count=$((damaged_count+1)) fi done if [[ ${damaged_count} -eq 0 ]]; then log "INFO" "所有修复章节完整性检查通过!" return 0 else log "ERROR" "发现 ${damaged_count} 个修复章节存在问题!" return 1 fi } # 生成摘要报告 generate_summary_report() { log "INFO" "开始生成完整摘要报告..." # 检查章节数量 local total_chapters=$(ls -1 "${NOVEL_DIR}/chapters"/*.md | wc -l) local last_chapter=$(ls -1 "${NOVEL_DIR}/chapters"/*.md | tail -1 | grep -o '[0-9][0-9][0-9][0-9]' | head -1) # 创建最新的摘要报告 local summary_file="${SUMMARY_DIR}/complete_chapter_summaries.md" cat > "${summary_file}" << EOF # 《末日重生:开局囤货十亿物资》完整章节剧情摘要 ## 整合时间:$(date '+%Y-%m-%d %H:%M:%S') ## 总章节数:${total_chapters}章 ## 📊 故事概述 **末世重生题材**:主角陈末重生回到末日降临前30天,利用先知先觉疯狂囤积十亿物资,建立顶级安全屋,在冰河末世中生存并崛起。 ## 📚 章节详细摘要(基于最新快照) **当前章节数量**: ${total_chapters}章 **最新章节**: 第${last_chapter}章 **统计时间**: $(date '+%Y-%m-%d %H:%M:%S') ### 章节状态总结 - **总章节数**: ${total_chapters}章 - **已修复章节**: 2-14章 - **后续章节**: ${last_chapter}章 - **总行数**: 章节正在统计中 - **同步状态: 待同步** --- *摘要报告由番茄小说创作助手自动生成* *同步时间: $(date '+%Y-%m-%d %H:%M:%S')* EOF log "INFO" "摘要报告生成完成:${summary_file}" } # 执行同步到Gitea sync_to_gitea() { log "INFO" "开始同步到Gitea仓库..." # 切换到小说目录 cd "${NOVEL_DIR}" # 检查git状态 if ! git status &>/dev/null; then log "ERROR" "Git仓库未初始化" return 1 fi # 检查远程仓库 if ! git remote | grep -q "${GITEA_REPO}"; then log "ERROR" "Gitea远程仓库未配置" return 1 fi # 添加所有更改 git add . 2>/dev/null || true # 检查是否有更改 if git diff --cached --quiet; then log "INFO" "没有更改需要提交" return 0 fi # 提交更改 local commit_message="自动同步:章节完整性检查和摘要报告更新 - 章节总数: $(ls -1 "chapters"/*.md | wc -l) 章 - 修复章节检查完成 - 摘要报告更新完成 - 同步时间: $(date '+%Y-%m-%d %H:%M:%S')" git commit -m "${commit_message}" || { log "ERROR" "提交失败" return 1 } # 推送到远程仓库 log "INFO" "正在推送到 Gitea 仓库..." if git push "${GITEA_REPO}" master; then log "INFO" "同步到Gitea仓库成功!" return 0 else log "ERROR" "推送到Gitea仓库失败!" return 1 fi } # 创建本地备份 create_local_backup() { local backup_dir="${NOVEL_DIR}/backups/$(date '+%Y%m%d_%H%M%S')" log "INFO" "创建本地备份到: ${backup_dir}" mkdir -p "${backup_dir}" # 备份章节文件 cp -r "${NOVEL_DIR}/chapters" "${backup_dir}/" # 备份摘要报告 cp -r "${SUMMARY_DIR}" "${backup_dir}/" # 备份状态文件 cp "${NOVEL_DIR}/story/"*.md "${backup_dir}/" 2>/dev/null || true # 创建备份报告 cat > "${backup_dir}/backup_report.md" << EOF # 本地备份报告 ## 备份信息 - **备份时间**: $(date '+%Y-%m-%d %H:%M:%S') - **备份目录**: $(basename ${backup_dir}) - **备份类型**: 本地完整备份 ## 备份内容 ### 章节文件 - 数量: $(ls -1 "chapters"/*.md 2>/dev/null | wc -l) 章 - 路径: ${NOVEL_DIR}/chapters/ ### 摘要报告 - 文件: complete_chapter_summaries.md - 路径: ${SUMMARY_DIR}/ ### 状态文件 - 路径: ${NOVEL_DIR}/story/ ## 小说状态 - 总章节数: $(ls -1 "chapters"/*.md 2>/dev/null | wc -l) 章 - 最新章节: 第$(ls -1 "chapters"/*.md 2>/dev/null | tail -1 | grep -o '[0-9][0-9][0-9][0-9]' | head -1)章 - 数据量: 章节文件总计 ## 恢复指南 如需恢复备份,请执行: \`\`\`bash # 停止正在运行的小说相关进程 # 复制备份文件 cp -r ${backup_dir}/chapters ${NOVEL_DIR}/ cp -r ${backup_dir}/consolidated_summaries ${NOVEL_DIR}/ cp ${backup_dir}/story/*.md ${NOVEL_DIR}/story/ 2>/dev/null || true \`\`\` --- *备份时间: $(date '+%Y-%m-%d %H:%M:%S')* *番茄小说创作助手* EOF # 压缩备份 tar -czf "${backup_dir}.tar.gz" -C "${NOVEL_DIR}/backups" "$(basename ${backup_dir})" log "INFO" "本地备份完成:${backup_dir}.tar.gz" } # 主执行函数 main() { log "INFO" "《末日重生:开局囤货十亿物资》同步管理器启动" log "INFO" "==============================================" # 创建日志目录 mkdir -p "$(dirname "${LOGFILE}")" # 步骤1:监控章节完整性 if check_chapter_count; then log "INFO" "检测到需要同步,继续执行..." # 步骤2:监控修复章节 if monitor_fixed_chapters; then log "INFO" "修复章节检查通过,继续执行..." else log "ERROR" "修复章节存在问题,需要检查!" exit 1 fi # 步骤3:生成摘要报告 generate_summary_report # 步骤4:同步到Gitea if sync_to_gitea; then log "INFO" "Gitea同步成功!" else log "ERROR" "Gitea同步失败" exit 1 fi # 步骤5:创建本地备份(每周执行一次) if [[ $(date '+%u') -eq 7 ]]; then # 周日执行 log "INFO" "周日自动创建本地备份..." create_local_backup fi log "INFO" "所有同步任务完成!" log "INFO" "访问 Gitea 仓库: https://gitea.nevadalice.top:226/liyuchen/novel-doomsday-resurgence" else log "INFO" "当前不需要同步,跳过主要同步任务" # 只监控修复章节完整性 monitor_fixed_chapters log "INFO" "快速完整性检查完成" fi log "INFO" "同步管理器执行完毕" log "INFO" "==============================================" } # 检查执行模式 if [[ "$1" == "--manual" ]]; then # 手动模式 log "INFO" "手动模式启动" shift case "$1" in "sync") generate_summary_report sync_to_gitea ;; "backup") create_local_backup ;; "check") check_chapter_count monitor_fixed_chapters ;; "all") generate_summary_report sync_to_gitea create_local_backup ;; *) echo "用法: $0 --manual {sync|backup|check|all}" exit 1 ;; esac else # 自动模式 main fi exit 0