This repository has been archived on 2026-08-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
openclaw/cron/scripts/daily-review.sh
T

93 lines
2.5 KiB
Bash
Executable File

#!/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"