
我有一個網站檔案系統,其中每個檔案都有兩個副本,一個摘要副本和一個大副本,具有不同的名稱。例如,一個大的副本檔案可能是 頁面/資訊/GK2grkG23r_lg.html而在摘要副本中,擴展名前的字母改為頁面/資訊/GK2grkG23r_sh.html。我正在嘗試在檔案系統上運行 wget,但所有設計連結都指向小副本以節省資源,而我需要一個大副本。所以在運行 wget 時頁面可能會下載所有摘要副本:
pages/info/GK2grkG23r_sh.html
pages/info/2Yp58xr4Ir_sh.html
pages/info/Lmk2nIj23r_sh.html
pages/info/M23Dka6D4r_sh.html
我想將 wget 要下載的檔案的名稱更改為:
pages/info/GK2grkG23r_lg.html
pages/info/2Yp58xr4Ir_lg.html
pages/info/Lmk2nIj23r_lg.html
pages/info/M23Dka6D4r_lg.html
即使 wget 找到的檔案將指向第一組。
需要明確的是,我不想下載具有上面第一組名稱的文件,然後重命名它們。我想運行 wget,然後它將嘗試下載第一個文件列表,但稍微更改字母,以便下載第二個列表。 wget可以做到這一點嗎?
答案1
您可以嘗試使用解決方法。
里程碑是:
- 下載完整的文件列表並將其儲存在文件中
- 更改檔案名稱的最後部分
- 僅下載名稱已修改的檔案。
filter.awk
您需要一個與此類似的文件
/^--.*-- http:\/\/.*[^\/]$/ { u=$3; }
/^Length: [[:digit:]]+/ { print u; }
一步步:
wget -r -np --spider http://yourhost | awk -f filter.awk > My_List.txt
sed -i s/_sh.html/_lg.html/g My_List.txt
wget -x -i My_List.txt
致謝:
我的靈感來自於這個答案。
答案2
首先,取得索引檔:
wget -O index.html "$URI"
然後,重寫其中的 URL:
sed -i '/_sh\(\.html\)/_lg\1/g' index.html
(我使用 sed,但您可能更喜歡,例如基於 XSLT 的方法。請選擇。)
pages/info/*
現在,告訴 wget使用修改後的索引檔案並以其原始位置作為起始基本 URI 來獲取所有:
wget --recursive --level=1 \
--input-file=index.html --force-html --base="$URI" \
--accept-regex 'pages/info/.*_lg\.html'
注意,大多數長選項都有短選項 - 請參閱線上說明頁。為了清楚起見,我使用了長形式。