You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过wget下载特级大师PGN对局压缩包的脚本优化问题

国际象棋对局自动下载脚本优化方案

针对你提出的两个问题,以下是具体解决方法和优化后的脚本:

问题1:实现每周自动递增计数器并执行脚本

核心思路是用状态文件记录已处理的最后对局编号,配合系统定时任务每周自动运行脚本,每次仅处理下一个编号的对局包:

  • 创建状态文件(如last_downloaded.txt)存储已处理的最大编号
  • 脚本每次读取该文件的编号,加1得到本次要处理的编号
  • 通过crontab设置每周一自动执行脚本

问题2:避免重复处理压缩包与重复合并对局

通过两点解决重复问题:

  • 用wget的-nc参数跳过已下载的压缩包
  • 脚本仅处理状态文件记录的下一个未处理编号,确保不会重复读取旧PGN文件追加到master.pgn

优化后的完整脚本

#!/bin/bash

# 配置参数
DOWNLOAD_DIR="pgn/zip"
STATE_FILE="../last_downloaded.txt"
MASTER_PGN="../master.pgn"
START_NUM=920  # 2012年6月25日对应的初始编号
MAX_NUM=1493   # 最大对局包编号

# 创建下载目录(不存在则生成)
if [[ ! -d "$DOWNLOAD_DIR" ]]; then
    mkdir -p "$DOWNLOAD_DIR"
fi

cd "$DOWNLOAD_DIR"

# 初始化状态文件:首次运行时设置初始编号
if [[ ! -f "$STATE_FILE" ]]; then
    echo "$START_NUM" > "$STATE_FILE"
fi

# 计算本次要处理的编号
LAST_PROCESSED=$(cat "$STATE_FILE")
CURRENT_NUM=$((LAST_PROCESSED + 1))

# 检查是否已处理完所有对局包
if [[ "$CURRENT_NUM" -gt "$MAX_NUM" ]]; then
    echo "所有对局包已处理完成,无需继续下载"
    exit 0
fi

# 下载目标压缩包
ZIP_FILENAME="twic${CURRENT_NUM}g.zip"
wget -nc "https://www.theweekinchess.com/zips/$ZIP_FILENAME"

# 验证下载并处理
if [[ -f "$ZIP_FILENAME" ]]; then
    # 解压仅提取PGN文件
    unzip -o "$ZIP_FILENAME" "twic${CURRENT_NUM}.pgn"
    # 追加到总PGN文件
    cat "twic${CURRENT_NUM}.pgn" >> "$MASTER_PGN"
    # 清理临时PGN文件
    rm "twic${CURRENT_NUM}.pgn"
    # 更新状态文件为当前处理的编号
    echo "$CURRENT_NUM" > "$STATE_FILE"
    echo "成功处理:twic${CURRENT_NUM}g.zip"
else
    echo "下载失败:twic${CURRENT_NUM}g.zip"
    exit 1
fi

设置每周自动运行

  1. 打开定时任务编辑界面:
    crontab -e
    
  2. 添加以下行(示例为每周一上午9点运行脚本,需替换为你的脚本实际路径):
    0 9 * * 1 /home/your_username/scripts/twic_download.sh
    
    (crontab格式说明:分 时 日 月 周,1代表周一)

内容的提问来源于stack exchange,提问作者Aaron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:53:10