2013-05-06 90 views
0

我試圖腳本wget命令來下載一個網頁,它的所有內部附件和JPEG等無法通過wget的一個變量引用變量

當我進入手動腳本,它的工作原理,但我需要運行這35000多次來存檔一個不受我控制的舊網站(國際公司政治,但我是數據的所有者)。

我的問題一直在變化會話參數。

我的劇本至今如下:

cnt=35209 
# initialise the headers 
general_settings='-4 -P xyz --restrict-file-names=windows -nc --limit-rate=250k' 
html_page_specific='--convert-links --html-extension' 
proxy='--proxy-user=xxxxxx --proxy-password=yyyyyyy' 
session="--header=\'Host: mywebsite.com:9090\' --header=\'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0\'" 
address=http://mywebsite.com:9090/browse/item-$cnt 

echo $general_settings $proxy $session $cookie $address 
echo 
echo 
echo Getting item-$cnt... 

#while [ $cnt -gt 0 ] 
#do 
# # get the page 
    wget --debug $general_settings $html_page_specific $proxy $session $cookie $address 

    # now get the attachments, pdf, txt, jpg, gif, sql, etc... 
# wget -A.pdf $general_settings -r $proxy $session $cookie $address 
# wget -A.txt $general_settings -r $proxy $session $cookie $address 
# wget -A.jpg $general_settings -r $proxy $session $cookie $address 
# wget -A.gif $general_settings -r $proxy $session $cookie $address 
# wget -A.sql $general_settings -r $proxy $session $cookie $address 
# wget -A.doc $general_settings -r $proxy $session $cookie $address 
# wget -A.docx $general_settings -r $proxy $session $cookie $address 
# wget -A.xls $general_settings -r $proxy $session $cookie $address 
# wget -A.xlsm $general_settings -r $proxy $session $cookie $address 
# wget -A.xlsx $general_settings -r $proxy $session $cookie $address 
# wget -A.xml $general_settings -r $proxy $session $cookie $address 
# wget -A.ppt $general_settings -r $proxy $session $cookie $address 
# wget -A.pptx $general_settings -r $proxy $session $cookie $address 
# wget -A.png $general_settings -r $proxy $session $cookie $address 
# wget -A.ps $general_settings -r $proxy $session $cookie $address 
# wget -A.mdb $general_settings -r $proxy $session $cookie $address 
# ((cnt=cnt-1)) 
# 
#done 

但是當我運行該腳本,我得到下面的輸出

Getting item-35209... 
Setting --inet4-only (inet4only) to 1 
Setting --directory-prefix (dirprefix) to xyz 
Setting --restrict-file-names (restrictfilenames) to windows 
Setting --no (noclobber) to 1 
Setting --limit-rate (limitrate) to 250k 
Setting --convert-links (convertlinks) to 1 
Setting --html-extension (htmlextension) to 1 
Setting --proxy-user (proxyuser) to xxxxx 
Setting --proxy-password (proxypassword) to yyyyy 
Setting --header (header) to \'Host: 
Setting --header (header) to 'Cookie: 
DEBUG output created by Wget 1.11.4 Red Hat modified on linux-gnu. 

正如你所看到的,主機和Cookie的部分是不格式正確,導致wget命令無法登錄並提取數據。

我一直在閱讀bash手冊頁,使用谷歌搜索,並嘗試了幾個相關的建議,但我仍然無法獲得執行命令。

任何人都會有足夠的精神向我展示正確的方式來引用可讀性中的引號嗎?

感謝,帶引號的字符串或變量的內部

回答

4

行情是普通字符,而不是引號字符。沒有辦法改變這一點。使用數組來代替:

A=(a b 'c d' 'e f') 
cmd "${A[@]}" 

調用cmd有四個參數abc de f

(你可以實現與eval類似的效果,但是這是一個很多更容易出錯。在你的情況下,使用陣列是方便多了。)

+0

烏韋, 對不起,這是愚蠢的,但我不明白這將有什麼區別,因爲我的字符串包含引號,即 「--header = \'主機:mywebsite.com:9090 \' 您能否擴展我將如何在數組中輸入變量值,以便可以讀取引號Bash是什麼意思? – dhevans79 2013-05-06 12:36:44

+0

或者是我使用的格式正確,並且通過使用數組,Bash將開始正確解釋它們? – dhevans79 2013-05-06 12:37:37

+0

定義'session =( - header ='Host:mywebsite.com:9090'--header ='User-Agent:... Firefox/20.0')'然後使用'「$ {session [@]}」 '而不是'$ session'。其他變量必須進行類似的修改。 – Uwe 2013-05-06 12:42:55

-2
session="--header=Host: mywebsite.com:9090 --header=User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0" 

利用這一點,

+1

如果你這樣做,那麼'wget'要麼用不同的參數'--header = Host:','mywebsite.com:9090','--header = User-Agent:','Mozilla/5.0', (如果使用'$ session'),或者使用一個參數'--header = Host:... Firefox/20.0'(如果使用'$ session「')。這兩種方法都沒有達到目標,即使用兩個參數'--header = Host:mywebsite.com:9090'和'--header = User-Agent:Mozilla/5.0 ... Firefox/20.0'來調用。 – Uwe 2013-05-06 11:45:50

+0

上面的評論是正確的。這正是我在輸出時看到的,當我在SO上提問之前嘗試了這個。 – dhevans79 2013-05-06 12:39:29