批量按批次打开TXT文件中URL的Shell脚本需求
批量按批次打开TXT文件中URL的Shell脚本需求
嘿,完全懂你的痛点——一次性开上百个URL太耗内存,手动分批又麻烦。我给你写了个bash脚本,完美匹配你的所有要求:按10个一批顺序打开、绝不重复、到末尾自动通知,而且只有关闭终端后重新运行才会从头开始。
直接上可用的脚本:
#!/bin/bash # 可自定义配置 URL_FILE="url.txt" # 你的URL列表文件路径 BATCH_SIZE=10 # 每批打开的URL数量 PROGRESS_FILE=".url_progress" # 隐藏的进度记录文件,无需手动操作 # 先检查URL文件是否存在 if [ ! -f "$URL_FILE" ]; then echo "⚠️ 错误:找不到URL文件 $URL_FILE,请确认路径正确!" exit 1 fi # 统计总URL数量 TOTAL_URLS=$(wc -l < "$URL_FILE") # 读取上次的进度,默认从第1行开始 if [ -f "$PROGRESS_FILE" ]; then CURRENT_LINE=$(cat "$PROGRESS_FILE") else CURRENT_LINE=1 fi # 计算本次要处理的URL范围 END_LINE=$((CURRENT_LINE + BATCH_SIZE - 1)) # 如果超出总数量,就设为最后一行 if [ $END_LINE -gt $TOTAL_URLS ]; then END_LINE=$TOTAL_URLS fi # 提取当前批次的URL URLS=$(sed -n "${CURRENT_LINE},${END_LINE}p" "$URL_FILE") # 没有URL可处理的情况 if [ -z "$URLS" ]; then echo "🎉 所有URL都已经打开完毕啦!" rm -f "$PROGRESS_FILE" exit 0 fi # 打开当前批次的URL(这里用Firefox,换成你常用的浏览器命令即可) echo "🔍 正在打开第 ${CURRENT_LINE} 到 ${END_LINE} 个URL..." firefox $URLS # 更新进度记录 echo $((END_LINE + 1)) > "$PROGRESS_FILE" # 检查是否完成所有任务 if [ $END_LINE -eq $TOTAL_URLS ]; then echo "✅ 所有URL处理完成!下次运行会从头开始。" rm -f "$PROGRESS_FILE" else echo "✅ 本次批次完成,下次运行将从第 $((END_LINE + 1)) 个URL继续。" fi
使用说明:
- 把代码保存成
open_urls.sh文件 - 给脚本添加执行权限:
chmod +x open_urls.sh - 把你的URL列表放在
url.txt里(每行一个URL) - 每次在终端运行
./open_urls.sh,就会打开下一批10个URL
贴心细节说明:
- 进度会自动存在隐藏的
.url_progress文件里,就算中途关闭终端再打开,下次运行也会接着上次的位置继续,不会重复打开URL - 当所有URL都打开完,脚本会自动删除进度文件,下次运行就会从头开始
- 如果不用Firefox,把脚本里的
firefox换成google-chrome、brave-browser等你常用的浏览器命令就行
备注:内容来源于stack exchange,提问作者Jeisson Cadena




