Wget - 將檔案儲存到以連結命名的本機目錄

Wget - 將檔案儲存到以連結命名的本機目錄

我是使用 wget 的新手,所以我希望這不是一個愚蠢的問題:

如何將檔案儲存到以檔案連結命名的本機目錄?

如果下載中涉及重定向,它似乎不起作用。

例如:假設我正在從 下載文件www.abc.com/news/xyz.jif,我可以使用 wget 將本地副本保存到www.abc.com以子目錄命名的目錄news,然後以文件命名xyz.jif

然而,如果檔案xyz.jif被移動到www.qwerty.com/old/xyz.jif並且搜尋被重定向到那裡,則該檔案仍然保存在www.abc.com...etc下

正如我所說,我對此很陌生,所以我希望我已經正確解釋了這個問題。

這是一個簡單的現實範例(使用 wget):

wget --force-directories www.smugmug.com/photos/1235566-S.jpg

它保存到: c:\www.smugmug.com/photos/1235566-S.jpg ,即不正確的。它應該將其保存到c:\suz.smugmug.com/photos/1235566-S.jpg重定向到的位置。

答案1

抱歉,一開始沒抓到重點。因此,一個全新的答案(快速而骯髒 - 由於它是 bash 編程,因此僅適用於 Linux):使用 cURL 來確定是否存在重定向(使用-w參數);根據結果,使用 wget 取得原始 url 或重定向目標:

url=www.smugmug.com/photos/1235566-S.jpg; redirurl=`curl -w "%{redirect_url}" --output /dev/null --silent ${url}`; if [ -z $redirurl ]; then wget -x $url; else wget -x $redirurl; fi

或者,在多行上:

url=www.smugmug.com/photos/1235566-S.jpg;
redirurl=`curl -w "%{redirect_url}" --output /dev/null --silent ${url}`;
if
    [ -z $redirurl ];
then wget -x $url;
else wget -x $redirurl; fi

redirurl設定為重定向目標(如果有)。如果沒有,wget則用原始url呼叫;如果是,wget則呼叫重定向目標。此-x參數使wget建立子目錄。

當然,這僅處理一級重定向。為了使其更加健壯,您必須遞歸檢查是否存在重定向。因此,如果您想以可靠的方式解決此問題,這不僅僅是命令列選項的問題。

相關內容