我在博客中保留了一些指向某些资源的链接列表
如果我发现链接已损坏,我会向其添加class="broken"
有时,断开的链接会再次显示为活动状态,因此我删除了class="broken"
当列表很长时,很难一个一个地检查它们。
<ul>
<li><a href="http://www.a.com">a</a></li>
<li><a href="http://www.b.com">b</a></li>
<li><a href="http://www.c.com" class="broken">c</a></li>
<li><a href="http://www.d.com">d</a></li>
</ul>
如何编写bash
脚本进行编辑?
答案 0 :(得分:0)
也许这不是你正在寻找的答案,但为什么要从bash中做到这一点,而不是编写页面来使用可以根据请求/动态执行此操作的javascript?这应该让你去http://www.egrappler.com/jquery-broken-link-checker-plugin-jslink/
但我认为也可以使用jQuery $ .get / $ .load方法自行创建类似的逻辑
答案 1 :(得分:0)
Bash不太合适。
选项1:我使用Java或Groovy,有一个SAX处理程序只是将所有数据转储到输出,除了它将检查<a>
值的href
元素,如果损坏,请添加class="broken"
部分。
选项2:拥有一个可以在<a>
元素上调用自定义XSLT函数的XSLT。我再次使用Java,但任何具有良好XSLT引擎的语言都可以做到这一点。
选项3:如果你真的想要感到怪异;-)这里有一条线来为Bash找到非常不可靠的链接检查器:
grep -R '(?:href="(http://[^"]+)")' -ohPI | grep -oP 'http://[^"]+' | sort | uniq | wget -nv -S -O /dev/null -i - 2>&1 | grep -P '(wget:| -> |HTTP/|Location:)'
它可能会变得更好,但我对此感到满意。
curl -L ...
(-L
跟随重定向)而不是wget
。grep -R '(?:"(http://[^"]+)")' -ohPI | grep -v search.maven.org | grep -oP 'http://[^"]+' | sort | uniq | xargs -I{} sh -c 'echo && echo "$1" && curl -i -I -L -m 5 -s -S "$1"' -- {} 2>&1 | grep -P '(^$|curl:|HTTP/|http://|https://|Location:)'
专业提示:curl
似乎有更多脚本友好的输出,因此您可以使其平行以加快速度:... | xargs -n 1 -P 8 curl -L ...
这将运行8个curl
进程,并传递一个参数(URL)一次。排序输出取决于你,我可能为每个curl
调用创建一个文件然后连接。