用wget下載C++的手冊
用wget下載C++的手冊
在Linux下,一般的軟體的文件都是比較全的,但是C++的文件卻沒有,雖然存在libstdc++-docs這個包,但裡面只不過是由原始碼生成的類庫文件,對於普通使用者來說並沒有太多用處。
因此,常常只能到ofollow,noindex" target="_blank">www.cplusplus.com/reference 網站上檢視文件和用法。
如果能夠將此網站上的文件下載下來,放在本地使用,就可以省卻連網的麻煩。這點對於不能連網的使用者是很有用的。
我們自然會想到使用wget來”扒”網頁。
wget -r -l 5 -np -k www.cplusplus.com/reference/
這裡的-r
表示遞迴,-l
表示遞迴下載的層次,這裡是5層,-np
表示不下載上層的檔案,以免將整個網站都蕩下來,-k
則表示在下載完之後修改網頁中的連結,以供本地使用。最後,不要忘了網址最後的斜劃線。
結果會得到一個目錄www.cplusplus.com , 用瀏覽器訪問即可。
firefox ./www.cplusplus.com/reference/index.html
但是有一個問題,如果你沒有聯網,則網頁的整潔的頁面就變亂了。這是因為每個網頁中都用到了www.cplusplus.com/v320/main.js
和www.cplusplus.com/v320/main.css
這兩個檔案,用來生成網頁的佈局。
現在,我們單獨將這兩個檔案下載下來,放在目錄www.cplusplus.com/reference/v320/
中。剩下的問題就是如何將所有的html檔案中的main.js和main.css的指向外網的絕對路徑改成本地的相對路徑。
我的指令碼是www.cplusplus.com/reference/script.sh
#!/bin/bash handle() { dir=`dirname "$@"` dir=${dir##./} exp=`echo "$dir"| sed 's/[^/]\+/../g'` if [[ $dir == "." ]] then exp="." fi sed -i "s,http://www.cplusplus.com/v320,$exp/v320,g" "$@" sed -i "s,show_ad,show_ad_,g" "$@" sed -i "s,DonateBox,DonateBox_,g" "$@" } export -f handle find . -name '*.html' -exec bash -c 'handle "$0"' {} \;
執行指令碼即可處理所有html檔案
cd www.cplusplus.com/reference bash ./script.sh
此指令碼並不是很複雜,功能是將網址http://www.cplusplus.com/v320
換成類似於../../v320
之類的相對路徑,並去掉廣告。腳本里面有兩個好用的功能需要備忘一下:
-
sed命令中的分隔符不一定是
/
,你可以用任何分隔符,比如本例中用的是,
。 -
export -f
可以將函式定義傳遞到子shell中,從而可以在find中呼叫此函式。當然先獲得所有檔名,再處理也是可以的,但在find中逐個檔案處理可以處理檔名中包含空格的情況。
最後,我把我整理的文件貢獻出來。