在 wget 下載檔案之前修改檔案名稱(而不是重新命名本機版本)

在 wget 下載檔案之前修改檔案名稱(而不是重新命名本機版本)

我有一個網站檔案系統,其中每個檔案都有兩個副本,一個摘要副本和一個大副本,具有不同的名稱。例如,一個大的副本檔案可能是 頁面/資訊/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

您可以嘗試使用解決方法。

里程碑是:

  1. 下載完整的文件列表並將其儲存在文件中
  2. 更改檔案名稱的最後部分
  3. 僅下載名稱已修改的檔案。

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'

注意,大多數長選項都有短選項 - 請參閱線上說明頁。為了清楚起見,我使用了長形式。

相關內容