爲猛砸不太合適的任務。
選項1:我要使用Java或Groovy中,有一個簡單的SAX處理所有的數據轉儲到輸出,除了<a>
元素,它會檢查href
值,若跌破,添加class="broken"
部分。
選項2:有一個XSLT,它可以調用<a>
元素上的自定義XSLT函數。再次,我會用Java來做這件事,但任何帶有良好XSLT引擎的語言都可以做到這一點。
方案三:如果你真的想要的感覺怪異;-)這裏有一個線變得非常不可靠的鏈接檢查爲擊:
grep -R '(?:href="(http://[^"]+)")' -ohPI | grep -oP 'http://[^"]+' | sort | uniq | wget -nv -S -O /dev/null -i - 2>&1 | grep -P '(wget:| -> |HTTP/|Location:)'
它可能會得到更好的,但我對此很好。
- 方案4:您可以採用
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 ...
這將運行的curl
8個進程,並通過一個參數(URL )一次。對輸出進行排序取決於您,我可能會爲每個curl
調用創建一個文件,然後將其並置。
我想象一下'grep'和'wget'的組合。 – 2012-02-05 12:08:22
您需要一些正則表達式來提取href =「...」部分,然後管道到,然後用class = broken替換。我認爲即使Bash可以做到這一點,它也不會很健壯。如果它只是一個遊戲沒關係,否則我會去另一種語言 –
Raffaele
2012-02-05 12:12:13
看看下面的鏈接是否可以幫助你... http://giantdorks.org/alain/little-shell-script-to-recursively-check- a-site-for-broken-links/ http://tldp.org/LDP/abs/html/writingscripts.html – 2012-02-05 12:13:17