通过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
设置每周自动运行
- 打开定时任务编辑界面:
crontab -e - 添加以下行(示例为每周一上午9点运行脚本,需替换为你的脚本实际路径):
(crontab格式说明:分 时 日 月 周,0 9 * * 1 /home/your_username/scripts/twic_download.sh1代表周一)
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

