wget下载总结
wget命令用來(lái)從指定的URL下載文件。wget非常穩(wěn)定,它在帶寬很窄的情況下和不穩(wěn)定網(wǎng)絡(luò)中有很強(qiáng)的適應(yīng)性,如果是由于網(wǎng)絡(luò)的原因下載失敗,wget會(huì)不斷的嘗試,直到整個(gè)文件下載完畢。如果是服務(wù)器打斷下載過程,它會(huì)再次聯(lián)到服務(wù)器上從停止的地方繼續(xù)下載。這對(duì)從那些限定了鏈接時(shí)間的服務(wù)器上下載大文件非常有用。
命令格式:
wget [參數(shù)列表] [目標(biāo)軟件、網(wǎng)頁(yè)的網(wǎng)址]
-a<日志文件>:在指定的日志文件中記錄資料的執(zhí)行過程; -A <后綴名>:指定要下載文件的后綴名,多個(gè)后綴名之間使用逗號(hào)進(jìn)行分隔; -R <后綴名>:指定拒絕下載的后綴名,多個(gè)后綴名之間使用逗號(hào)進(jìn)行分隔; -b:進(jìn)行后臺(tái)的方式運(yùn)行wget; -B<連接地址>:設(shè)置參考的連接地址的基地地址; -c:繼續(xù)執(zhí)行上次終端的任務(wù); -C<標(biāo)志>:設(shè)置服務(wù)器數(shù)據(jù)塊功能標(biāo)志on為激活,off為關(guān)閉,默認(rèn)值為on; -d:調(diào)試模式運(yùn)行指令; -D<域名列表>:設(shè)置順著的域名列表,域名之間用“,”分隔; -e<指令>:作為文件“.wgetrc”中的一部分執(zhí)行指定的指令; -h:顯示指令幫助信息; -i<文件>:從指定文件獲取要下載的URL地址; -l<目錄列表>:設(shè)置順著的目錄列表,多個(gè)目錄用“,”分隔; -L:僅順著關(guān)聯(lián)的連接; -r:遞歸下載方式; -nc:文件存在時(shí),下載文件不覆蓋原有文件; -nv:下載時(shí)只顯示更新和出錯(cuò)信息,不顯示指令的詳細(xì)執(zhí)行過程; -q:不顯示指令執(zhí)行過程; -nh:不查詢主機(jī)名稱; -v:顯示詳細(xì)執(zhí)行過程; -V:顯示版本信息; --passive-ftp:使用被動(dòng)模式PASV連接FTP服務(wù)器; --follow-ftp:從HTML文件中下載FTP連接文件。1、用Wget下載單個(gè)文件
從網(wǎng)絡(luò)下載一個(gè)文件并保存在當(dāng)前目錄,在下載的過程中會(huì)顯示進(jìn)度條,包含(下載完成百分比,已經(jīng)下載的字節(jié),當(dāng)前下載速度,剩余下載時(shí)間)。
wget http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz2、指定下載文件的文件名
wget默認(rèn)會(huì)以最后一個(gè)符合”/”的后面的字符來(lái)命令,對(duì)于動(dòng)態(tài)鏈接的下載通常文件名會(huì)不正確。
錯(cuò)誤:下面的例子會(huì)下載一個(gè)文件并以名稱download.php?id=1080保存
即使下載的文件是zip格式,它仍然以download.php?id=1080命令。
正確:為了解決這個(gè)問題,我們可以使用參數(shù)-O來(lái)指定一個(gè)文件名:
3、限速下載
當(dāng)你執(zhí)行wget的時(shí)候,它默認(rèn)會(huì)占用全部可能的寬帶下載。但是當(dāng)你準(zhǔn)備下載一個(gè)大文件,而你還需要下載其它文件時(shí)就有必要限速了。
wget –limit-rate=300k http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.g4、斷點(diǎn)續(xù)傳
當(dāng)你在下載一個(gè)大文件時(shí)突然中斷了那么這個(gè)選項(xiàng)就派上用場(chǎng)了
wget -c http://cn.wordpress.org/http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz5、后臺(tái)下載用wget -b
用此選項(xiàng)下載時(shí)只會(huì)初始化下載而不會(huì)顯示相關(guān)信息
wget -b http://www.linuxde.net/testfile.zip查看下載進(jìn)度:
tail -f wget-log6、偽裝代理名稱下載(agent)
有些網(wǎng)站能通過根據(jù)判斷代理名稱不是瀏覽器而拒絕你的下載請(qǐng)求。不過你可以通過–user-agent參數(shù)偽裝。
wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.linuxde.net/testfile.zip7、測(cè)試下載鏈接
wget --spider URL如果所給URL是正確的則會(huì)顯示
Spider mode enabled. Check if remote file exists. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Remote file exists and could contain further links, but recursion is disabled -- not retrieving.否則顯示
wget --spider url Spider mode enabled. Check if remote file exists. HTTP request sent, awaiting response... 404 Not Found Remote file does not exist -- broken link!!!8、增加重連次數(shù)用
在網(wǎng)絡(luò)有問題的情況次選項(xiàng)尤其有用,默認(rèn)是wget會(huì)重連20次以成功完成下載,我們可以把他增加為我們期待的次數(shù)
wget --tries=100 DOWNLOAD-URL9、下載多個(gè)文件
首先把所有要下載的文件或者URL存到一個(gè)記事本中,比如aa.txt,里面內(nèi)容如下
URL1 URL2 URL3 URL4接下來(lái)輸入如下代碼就可以批量下載了
wget -i aa.txt10、下載一個(gè)完整的網(wǎng)站用
以下實(shí)現(xiàn)是你想完整的下載一個(gè)網(wǎng)站用于本地瀏覽
wget --mirror -p --convert-links -P LOCAL-DIR WEBSITE-URL–mirror:打開鏡像選項(xiàng)
-p:下載所有用于顯示給定網(wǎng)址所必須的文件
–convert-links:下載以后,轉(zhuǎn)換鏈接用于本地顯示
-P LOCAL_DIR:保存所有的文件或目錄到指定的目錄下
11、保存輸出到日志文件而不是標(biāo)準(zhǔn)輸出用
當(dāng)你想要把信息保存到一個(gè)文件而不是在終端顯示時(shí)用以下代碼。
wget -o download.log DOWNLOAD-URL12、當(dāng)超過指定大小時(shí)終止下載用
當(dāng)文件已下載10M,此時(shí)你想停止下載可以使用下面的命令行
wget -Q10m -i FILE-WHICH-HAS-URLS注意:此選項(xiàng)只能在下載多個(gè)文件時(shí)有用,當(dāng)你下載一個(gè)文件時(shí)沒用。
13、下載特定文件類型的文件用
你可以用此方法下載一下文件:
~從一個(gè)網(wǎng)站下載所有圖片
~從一個(gè)網(wǎng)站下載所有視頻
~從一個(gè)網(wǎng)站下載所有PDF文件
wget -r -A.pdf http://url-to-webpage-with-pdfs/14、指定不下載某一類型的文件用
你發(fā)現(xiàn)一個(gè)網(wǎng)站很有用,但是你不想下載上面的圖片,因?yàn)樘剂髁?#xff0c;此時(shí)你可以用如下命令。
wget --reject=gif WEBSITE-TO-BE-DOWNLOADED15、用wget實(shí)現(xiàn)FTP下載
匿名FTP下載用
wget ftp-url有用戶名和密碼的FTP下載
wget --ftp-user=USERNAME --ftp-password=PASSWORD DOWNLOAD-URL16、wget下載有的資源時(shí)必須用選項(xiàng) --no-check-certificate,否則會(huì)提示沒有認(rèn)證不允許下載
wget --no-check-certificate URL17、密碼和認(rèn)證。
wget只能處理利用用戶名/密碼方式限制訪問的網(wǎng)站,可以利用兩個(gè)參數(shù):
--http-user=USER 設(shè)置HTTP用戶–http-passwd=PASS 設(shè)置HTTP密碼對(duì)于需要證書做認(rèn)證的網(wǎng)站,就只能利用其他下載工具了,例如curl。
18、利用代理服務(wù)器進(jìn)行下載
如果用戶的網(wǎng)絡(luò)需要經(jīng)過代理服務(wù)器,那么可以讓wget通過代理服務(wù)器進(jìn)行文件的下載。此時(shí)需要在當(dāng)前用戶的目錄下創(chuàng)建一個(gè) .wgetrc 文件。文件中可以設(shè)置代理服務(wù)器:
http-proxy = 111.111.111.111:8080ftp-proxy = 111.111.111.111:8080分別表示http的代理服務(wù)器和ftp的代理服務(wù)器。如果代理服務(wù)器需要密碼則使用:
–proxy-user=USER 設(shè)置代理用戶–proxy-passwd=PASS 設(shè)置代理密碼這兩個(gè)參數(shù)。
使用參數(shù) –proxy=on/off 使用或者關(guān)閉代理。
19、設(shè)定下載時(shí)間
如果你需要在你的辦公電腦上通過和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
$ at 2300 warning: commands will be executed using /bin/sh at> wget http://place.your.url/here at> press Ctrl-D這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
20、定時(shí)下載
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒有完成,一天的工作卻又要開始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here 0 6 * * 1-5 killall wget這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:
$ crontab crontab.txtwget的這個(gè)“-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用“crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過共享的電話撥號(hào)來(lái)下載過很多的ISO鏡像文件,還是比較實(shí)用的。
21、下載動(dòng)態(tài)變化的頁(yè)面
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次。所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒有文件長(zhǎng)度,因此”-c”這個(gè)參數(shù)也就失去了意義。
例如:一個(gè)PHP寫的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
$ wget http://lwn.net/bigpage.php3我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了。
#!/bin/bash #create it if absent touch bigpage.php3#check if we got the whole thing while ! grep -qi bigpage.php3 do rm -f bigpage.php3#download LWN in one big page wget http://lwn.net/bigpage.php3done這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了””,這就表示該文件已經(jīng)完全更新了.
22、對(duì)于ssl和Cookies怎么辦?
如果你要通過ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以 https: 來(lái)開頭的,在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie。所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到“Cookie:”這個(gè)參數(shù).這樣才能保證下載的參數(shù)正確。對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,$6,$7)} )就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載 http://www.nytimes.com 上的內(nèi)容。當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè)。
w3m使用了一種不同的,更小巧的Cookie文件格式:
$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,$2,$3)} )現(xiàn)在就可以用這種方法來(lái)下載了:
$ wget –header="Cookie: $cookie" http://www.nytimes.com/reuters/technology/tech-tech-supercomput.html或者用curl工具:
$ curl -v -b $cookie -o supercomp.html http://www.nytimes.com/reuters/technology/tech-tech-supercomput.htm23、如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替。
$ lynx -dump ftp://ftp.xxx.com/pub/lg/ |grep gz$ |tail -10 |awk {print $2} > urllist.txtlynx的輸出結(jié)果可以被各種GNU文本處理工具過慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到 urllist.txt文件里.然后我們可以寫一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
$ for x in $(cat urllist.txt) > do > wget $x > done這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.xxx.com/pub/lg/)上的最新10個(gè)論題。
24、擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過程.但這個(gè)技巧 需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載Mandrake 10.0:
url1=http://ftp.eecs.umich.edu/pub/linux/mandrake/iso/Mandrake10.0-inst.iso
url2=http://ftp.rpmfind.net/linux/Mandrake/iso/Mandrake10.0-inst.iso
url3=http://ftp.wayne.edu/linux/mandrake/iso/Mandrake10.0-inst.iso
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
$ curl -r 0-199999999 -o mdk-iso.part1 $url1 & $ curl -r 200000000-399999999 -o mdk-iso.part2 $url2 & $ curl -r 400000000- -o mdk-iso.part3 $url3 &這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè) 進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤之前先檢查md5) 你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^程。
wget還有很多有用的功能,需要您來(lái)挖掘。
總結(jié)
- 上一篇: 用wget下载文件
- 下一篇: html代码雨特效代码,简易代码雨特效