我有一个包含 URL 列表的文本文件,如下所示:
http://somesite.com/some-article/
https://anothersite.fr/somepage.php?page=something
我想要做的是检查哪些 URL 返回 HTTP 代码 200(正常)并将它们放入另一个文件的列表中。
我怎样才能使用终端来完成这个任务?卷曲?
答案1
尝试使用以下方法执行此操作巴什:
while read url ; do
ret=$(curl -I -s "$url" -o /dev/null -w "%{http_code}\n")
((ret==200)) && echo "$url" >> new_list_URL
done < list_URL
或 POSIX 模式:
while read url ; do
ret=$(curl -I -s "$url" -o /dev/null -w "%{http_code}\n")
[ $ret -eq 200 ] && echo "$url" >> new_list_URL
done < list_URL
查看男子卷曲
答案2
答案3
可能不是最好的方法,但您也可以使用这个易于理解的 shell 脚本:
while read i
do
wget --spider $i > /dev/null 2>1
if [ $? == 0 ]
then
echo $i >> validlist.txt
fi
done
运行此 shell 脚本./wget_check.sh < urllist.txt
,其中wget_check.sh
是脚本名称,urllist.txt 是保存 URL 的文本文件。
该脚本基本上针对列表中的所有每个 URL 运行wget --spider
,如果 URL 返回有效的 200 OK 响应,则将 URL 添加到另一个文件“validlist.txt”。
该
--spider
选项将“爬行”URL,并且不会下载任何文件。由于输出将被重定向到 /dev/null,因此不会产生任何输出。
如果没有得到一个,每个
wget
都会返回一个非零返回值200 OK response