mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-29 02:15:13 +08:00
Update adblock.sh
This commit is contained in:
1 parent
a12e7a5d23
commit
2e63de2080
1 file changed
+33
-20
@@ -5,6 +5,9 @@ LOCK_FILE="/var/lock/ad_download.lock"
|
||||
TMP_DIR="/tmp/ad_download"
|
||||
RULES_PATH="/usr/share/passwall/rules"
|
||||
|
||||
# ========== 白名单:合并后需要排除的域名 ==========
|
||||
WHITELIST="ip-api.com"
|
||||
|
||||
# ========== 加锁,防止重复运行 ==========
|
||||
exec 200>"$LOCK_FILE"
|
||||
if ! flock -n 200; then
|
||||
@@ -94,32 +97,42 @@ INDEX=0
|
||||
for url in $AD_URLS; do
|
||||
[ -z "$url" ] && continue
|
||||
INDEX=$((INDEX + 1))
|
||||
process_url "$INDEX" "$url" &
|
||||
process_url "$INDEX" "$url"
|
||||
done
|
||||
|
||||
# 等待所有后台任务完成
|
||||
wait
|
||||
|
||||
# ========== 合并、去重、去空行 ==========
|
||||
# ========== 合并、去重、去空行、排除白名单 ==========
|
||||
[ -f $RULES_PATH/my_block_host ] || touch $RULES_PATH/my_block_host
|
||||
if ls "$TMP_DIR"/parsed_*.txt >/dev/null 2>&1; then
|
||||
awk '!seen[$0]++ && NF' "$TMP_DIR"/parsed_*.txt > $RULES_PATH/ads_host
|
||||
COUNT=$(wc -l < "$RULES_PATH/ads_host")
|
||||
echo "========================================"
|
||||
echo "[DONE] 合并完成: $RULES_PATH/ads_host"
|
||||
echo "[DONE] 总域名数: $COUNT"
|
||||
echo "========================================"
|
||||
NEW_FILE="$TMP_DIR/ad_domains_new.txt"
|
||||
awk -v wl="$WHITELIST" '
|
||||
BEGIN {
|
||||
n = split(wl, a, " ")
|
||||
for (i = 1; i <= n; i++) white[a[i]] = 1
|
||||
}
|
||||
NF && !seen[$0]++ && !($0 in white)
|
||||
' "$TMP_DIR"/parsed_*.txt $RULES_PATH/my_block_host > "$NEW_FILE"
|
||||
|
||||
# ========== 比较新旧文件 hash ==========
|
||||
if [ -f "$RULES_PATH/block_host" ]; then
|
||||
OLD_HASH=$(md5sum "$RULES_PATH/block_host" | awk '{print $1}')
|
||||
else
|
||||
OLD_HASH=""
|
||||
fi
|
||||
NEW_HASH=$(md5sum "$NEW_FILE" | awk '{print $1}')
|
||||
|
||||
if [ "$OLD_HASH" = "$NEW_HASH" ]; then
|
||||
rm -f "$NEW_FILE"
|
||||
else
|
||||
[ -s $NEW_FILE ] && {
|
||||
rm -f $RULES_PATH/block_host
|
||||
mv -f "$NEW_FILE" "$RULES_PATH/block_host"
|
||||
/etc/init.d/passwall reload > /dev/null 2>&1 &
|
||||
}
|
||||
fi
|
||||
else
|
||||
echo "[ERROR] 没有成功解析任何文件"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[ -s $RULES_PATH/ads_host ] && {
|
||||
[ -s $RULES_PATH/my_block_host ] && {
|
||||
rm -f $RULES_PATH/block_host
|
||||
awk '!/^[[:space:]]*(#|$)/ && !seen[$0]++' $RULES_PATH/ads_host $RULES_PATH/my_block_host > $RULES_PATH/block_host
|
||||
} || ln -sf $RULES_PATH/ads_host $RULES_PATH/block_host
|
||||
}
|
||||
[ "$OLD_HASH" != "$NEW_HASH" ] && exit 0 || exit 2
|
||||
|
||||
/etc/init.d/passwall reload > /dev/null 2>&1 &
|
||||
|
||||
exit 0
|
||||
Reference in new issue
Block a user