本文目录导读:

我来为您编写一个清理无效应用链接的脚本,以下是一个通用的Shell脚本,支持多种场景:
基础版本(Shell脚本)
#!/bin/bash
# 清理无效应用链接脚本
# 适用于Linux/Mac系统
# 配置文件
CONFIG_FILE="app_links.txt"
LOG_FILE="cleanup_$(date +%Y%m%d_%H%M%S).log"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log() {
echo -e "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# 检查URL是否有效
check_url() {
local url=$1
# 使用curl检查链接状态,-I只获取头部,-s静默模式,-L跟随重定向
local http_code=$(curl -I -s -L -o /dev/null -w "%{http_code}" --connect-timeout 10 "$url" 2>/dev/null)
if [[ $http_code -eq 200 ]] || [[ $http_code -eq 301 ]] || [[ $http_code -eq 302 ]]; then
return 0 # 有效链接
else
return 1 # 无效链接
fi
}
# 清理链接文件
cleanup_links() {
local input_file=$1
local output_file="${input_file%.*}_cleaned.txt"
local temp_file=$(mktemp)
log "开始清理链接文件: $input_file"
# 统计
local total=0
local valid=0
local invalid=0
while IFS= read -r line; do
# 跳过空行和注释
[[ -z "$line" || "$line" =~ ^# ]] && continue
total=$((total + 1))
# 提取URL(假设每行一个URL)
url=$(echo "$line" | grep -oP 'https?://[^\s]+' || echo "$line")
log "${YELLOW}检查[$total]: $url${NC}"
if check_url "$url"; then
echo "$line" >> "$temp_file"
valid=$((valid + 1))
log "${GREEN}有效: $url${NC}"
else
invalid=$((invalid + 1))
log "${RED}无效: $url${NC}"
fi
# 添加延迟,避免请求过快
sleep 0.5
done < "$input_file"
# 生成清理后的文件
if [[ -s "$temp_file" ]]; then
mv "$temp_file" "$output_file"
log "已生成清理后的文件: $output_file"
else
rm "$temp_file"
log "所有链接都无效,未生成清理文件"
fi
# 输出统计信息
log "==================================="
log "统计信息:"
log "总链接数: $total"
log "有效链接: $valid"
log "无效链接: $invalid"
log "==================================="
}
# 批量清理模式(并行检查)
batch_cleanup() {
local input_file=$1
local output_file="${input_file%.*}_cleaned.txt"
local temp_dir=$(mktemp -d)
log "开始批量清理(并行模式)..."
# 使用多进程检查
while IFS= read -r line; do
[[ -z "$line" || "$line" =~ ^# ]] && continue
url=$(echo "$line" | grep -oP 'https?://[^\s]+' || echo "$line")
echo "$url" >> "$temp_dir/urls.txt"
echo "$line" >> "$temp_dir/original.txt"
done < "$input_file"
# 并行检查
cat "$temp_dir/urls.txt" | while read -r url; do
if check_url "$url"; then
echo "$line" >> "$output_file"
fi
done
rm -rf "$temp_dir"
}
# Python版本(更强功能)
python_cleanup() {
cat > /tmp/cleanup_links.py << 'EOF'
#!/usr/bin/env python3
import requests
import concurrent.futures
import sys
import os
from urllib.parse import urlparse
def check_url(url, timeout=10):
"""检查URL是否有效"""
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
response = requests.head(url, timeout=timeout, headers=headers, allow_redirects=True)
return response.status_code in [200, 301, 302, 303, 307, 308]
except requests.exceptions.RequestException:
return False
def cleanup_links_file(input_file, output_file, max_workers=10):
"""清理链接文件"""
valid_links = []
invalid_links = []
# 读取链接
with open(input_file, 'r') as f:
links = [line.strip() for line in f if line.strip() and not line.startswith('#')]
print(f"总共发现 {len(links)} 个链接")
# 使用线程池并行检查
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
future_to_url = {executor.submit(check_url, url): url for url in links}
for i, future in enumerate(concurrent.futures.as_completed(future_to_url), 1):
url = future_to_url[future]
try:
is_valid = future.result()
if is_valid:
valid_links.append(url)
print(f"[{i}/{len(links)}] ✓ 有效: {url}")
else:
invalid_links.append(url)
print(f"[{i}/{len(links)}] ✗ 无效: {url}")
except Exception as e:
invalid_links.append(url)
print(f"[{i}/{len(links)}] ✗ 错误: {url} - {str(e)}")
# 保存有效链接
with open(output_file, 'w') as f:
for link in valid_links:
f.write(link + '\n')
# 输出统计
print(f"\n{'='*40}")
print(f"清理完成!")
print(f"有效链接: {len(valid_links)}")
print(f"无效链接: {len(invalid_links)}")
print(f"已保存到: {output_file}")
print(f"{'='*40}")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("使用方法: python3 cleanup_links.py <input_file> [output_file]")
sys.exit(1)
input_file = sys.argv[1]
output_file = sys.argv[2] if len(sys.argv) > 2 else "cleaned_links.txt"
if not os.path.exists(input_file):
print(f"错误: 文件 {input_file} 不存在")
sys.exit(1)
cleanup_links_file(input_file, output_file)
EOF
python3 /tmp/cleanup_links.py "$1" "$2"
}
# 主菜单
main() {
echo "=================================="
echo " 无效应用链接清理工具 v1.0"
echo "=================================="
echo "1. 基础模式 (Shell, 单线程)"
echo "2. 批量模式 (Shell, 并行)"
echo "3. Python模式 (高速, 多线程)"
echo "4. 退出"
echo "=================================="
read -p "请选择模式 [1-4]: " choice
if [[ "$choice" == "4" ]]; then
exit 0
fi
read -p "请输入链接文件路径: " file_path
if [[ ! -f "$file_path" ]]; then
echo "错误: 文件不存在"
exit 1
fi
case $choice in
1) cleanup_links "$file_path" ;;
2) batch_cleanup "$file_path" ;;
3) python_cleanup "$file_path" ;;
*) echo "无效选择" ;;
esac
}
# 运行主程序
main "$@"
使用说明
准备链接文件
创建一个包含链接的文本文件(每行一个):
https://www.example.com/app1 https://www.example.com/app2 https://www.example.com/app3
运行脚本
# 添加执行权限 chmod +x cleanup_links.sh # 运行 ./cleanup_links.sh
直接使用Python版本(推荐)
# 安装依赖 pip install requests # 直接运行 python3 /tmp/cleanup_links.py input_links.txt output_links.txt # 或者使用多线程(更快) python3 /tmp/cleanup_links.py input_links.txt cleaned_links.txt
Windows PowerShell版本
# check_links.ps1
param(
[Parameter(Mandatory=$true)]
[string]$InputFile,
[string]$OutputFile = "cleaned_links.txt"
)
function Check-Url {
param($Url)
try {
$request = [System.Net.WebRequest]::Create($Url)
$request.Method = "HEAD"
$request.Timeout = 10000
$response = $request.GetResponse()
$statusCode = [int]$response.StatusCode
$response.Close()
return $statusCode -in @(200, 301, 302)
} catch {
return $false
}
}
# 读取链接
$links = Get-Content $InputFile | Where-Object { $_ -and $_ -notmatch '^#' }
Write-Host "总共发现 $($links.Count) 个链接" -ForegroundColor Yellow
$validLinks = @()
$invalidLinks = @()
foreach ($url in $links) {
Write-Host "检查: $url" -NoNewline
if (Check-Url $url) {
Write-Host " ✓ 有效" -ForegroundColor Green
$validLinks += $url
} else {
Write-Host " ✗ 无效" -ForegroundColor Red
$invalidLinks += $url
}
}
# 保存有效链接
$validLinks | Out-File -FilePath $OutputFile
Write-Host "`n清理完成!" -ForegroundColor Green
Write-Host "有效链接: $($validLinks.Count)"
Write-Host "无效链接: $($invalidLinks.Count)"
Write-Host "已保存到: $OutputFile"
# 运行命令
# .\check_links.ps1 -InputFile "links.txt" -OutputFile "cleaned.txt"
功能特点
- 多种检查方式:支持HTTP状态码检查和超时处理
- 并行处理:Python版本使用多线程提高效率
- 日志记录:记录所有检查结果
- 统计信息:显示有效/无效链接数量
- 跨平台:支持Linux、Mac和Windows
高级用法
# 自定义检查(Python)
def custom_check_url(url):
"""自定义检查逻辑"""
import json
import requests
try:
# 模拟真实用户访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'application/json,text/html,application/xhtml+xml'
}
# 检查页面内容
response = requests.get(url, headers=headers, timeout=15)
if response.status_code == 200:
# 检查是否包含特定内容
if "404" in response.text or "not found" in response.text.lower():
return False
return True
return False
except:
return False
选择适合您的版本和模式运行即可,如果需要其他功能或修改,请告诉我。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播