#!/bin/bash # ========== 参数解析 ========== PROXY_ARG="" while getopts ":x:" opt; do case $opt in x) # 注意去除前面的等号(比如 -x=http://... 传入时可能带=) proxy_val="${OPTARG#*=}" if [[ -z "$proxy_val" ]]; then proxy_val="$OPTARG" fi PROXY_ARG="--proxy $proxy_val" echo "✅ 使用代理:$proxy_val" ;; *) echo "❌ 未知参数" exit 1 ;; esac done # ========== 路径定义 ========== SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" NODELIST_FILE="$SCRIPT_DIR/../source/nodelist.txt" RESULT_FILE="$SCRIPT_DIR/result.log" if [ ! -f "$NODELIST_FILE" ]; then echo "❌ 节点列表文件不存在:$NODELIST_FILE" exit 1 fi # ========== 时间比较函数 ========== month=2592000 timestamp=$(date +%s) lastMonth=$((timestamp - month)) function isUpdated() { # macOS 可能没有 gdate,优先用 date -d ,失败用 gdate -d t1=$(date -d "$1" +%s 2>/dev/null || gdate -d "$1" +%s 2>/dev/null) if [ -z "$t1" ]; then return 1; fi [ "$t1" -gt "$lastMonth" ] } # ========== 主逻辑 ========== rm -f "$RESULT_FILE" i=0 while IFS= read -r url || [ -n "$url" ]; do [[ -z "$url" || "$url" != https://raw.githubusercontent.com* ]] && continue i=$((i + 1)) code=$(curl $PROXY_ARG -o /dev/null -k -s -w "%{http_code}" "$url") if [ "$code" -ne 404 ]; then repo_path=$(echo "$url" | cut -d '/' -f 4,5) repo_api="https://api.github.com/repos/$repo_path" response=$(curl $PROXY_ARG -s -H "User-Agent: alive-script" "$repo_api") updated_at=$(echo "$response" | jq -r '.updated_at // empty') if [ -n "$updated_at" ]; then updated_at=${updated_at:0:19} updated_at=${updated_at/T/' '} if isUpdated "$updated_at"; then echo "$url" >> "$RESULT_FILE" echo "✅ $url 最近更新:$updated_at" else echo "⏱ $url 超过一个月未更新:$updated_at" fi else echo "⚠️ 无法获取更新时间:$repo_api" echo "🔍 响应内容(截断):" echo "$response" | head -n 5 fi fi if ((i % 8 == 0)); then echo "⏳ 暂停 120 秒,防止限流..." sleep 120 fi done < "$NODELIST_FILE" echo "✅ 扫描完成,结果已写入:$RESULT_FILE"