2012-02-05 40 views
0

我在我的博客中維護了一些資源鏈接列表。
如果我發現鏈接已損壞,我添加一個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

我想象一下'grep'和'wget'的組合。 – 2012-02-05 12:08:22

+0

您需要一些正則表達式來提取href =「...」部分,然後管道到,然後用class = broken替換。我認爲即使Bash可以做到這一點,它也不會很健壯。如果它只是一個遊戲沒關係,否則我會去另一種語言 – Raffaele 2012-02-05 12:12:13

+0

看看下面的鏈接是否可以幫助你... 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

回答

0

也許這不是你正在尋找的答案,但爲什麼從bash做到這一點,而不是編寫頁面來使用JavaScript,可以根據請求/在飛行中做到這一點?這應該讓你去http://www.egrappler.com/jquery-broken-link-checker-plugin-jslink/

,但我認爲這將是也可以創建你自己的類似的邏輯,使用jQuery和$ .get/$ .load方法

0

爲猛砸不太合適的任務。

  • 選項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調用創建一個文件,然後將其並置。