#!/bin/bash # 每日回顾整理脚本 # ~/work/zq 是 rclone mount 挂载点,直接读写即可,禁止 rclone sync # 无需 git 操作,挂载点会自动同步到 NAS set -e WORK_DIR="/home/starmen1265/work/zq" TODO_FILE="$WORK_DIR/01.待办/03.TODO.md" REVIEW_DIR="$WORK_DIR/40.归档/每日回顾" LOG_FILE="$HOME/.openclaw/cron/logs/daily-review.log" # 获取昨天的日期(格式:YYYY-MM-DD) YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) REVIEW_FILE="$REVIEW_DIR/$YESTERDAY.md" # 确保目录存在 mkdir -p "$REVIEW_DIR" mkdir -p "$(dirname "$LOG_FILE")" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } log "=== 每日回顾整理开始 ===" log "处理日期: $YESTERDAY" # 检查 TODO 文件是否存在且可读 if [ ! -f "$TODO_FILE" ]; then log "TODO 文件不存在,跳过" exit 0 fi # 如果没有已完成的任务,直接退出 if ! grep -q "\[x\]" "$TODO_FILE"; then log "没有已完成的任务,跳过" exit 0 fi log "1. 发现已完成的任务,开始整理..." # 提取已完成的任务(保留标题结构) COMPLETED_TASKS=$(awk ' /^#/ { current_section = $0 } /\[x\]/ { if (current_section != last_section) { print current_section last_section = current_section } print $0 } ' "$TODO_FILE") # 创建每日回顾文件并写入 log "2. 写入每日回顾: $REVIEW_FILE" echo "$COMPLETED_TASKS" | sed 's/ ✅ [0-9-]*$//' >> "$REVIEW_FILE" # 从 TODO.md 中删除已完成的任务行(使用临时文件避免 sed -i 在挂载点的问题) log "3. 清理 TODO.md 中的已完成任务..." TEMP_FILE=$(mktemp) grep -v '\[x\]' "$TODO_FILE" > "$TEMP_FILE" # 清理空标题段(标题下没有非空行的) awk ' /^#/ { if (section_content != "") { print section_header print section_content } section_header = $0 section_content = "" next } !/^#/ && $0 != "" { section_content = section_content "\n" $0 } END { if (section_content != "") { print section_header print section_content } } ' "$TEMP_FILE" > "$TEMP_FILE.cleaned" # 原子替换 cat "$TEMP_FILE.cleaned" > "$TODO_FILE" rm -f "$TEMP_FILE" "$TEMP_FILE.cleaned" # 挂载点自动同步,无需 rclone sync 或 git push log "4. 挂载点自动同步到 NAS,无需手动操作" log "=== 每日回顾整理完成 ===" echo "Daily review completed for $YESTERDAY"