![Wget - 將檔案儲存到以連結命名的本機目錄](https://rvso.com/image/1452862/Wget%20-%20%E5%B0%87%E6%AA%94%E6%A1%88%E5%84%B2%E5%AD%98%E5%88%B0%E4%BB%A5%E9%80%A3%E7%B5%90%E5%91%BD%E5%90%8D%E7%9A%84%E6%9C%AC%E6%A9%9F%E7%9B%AE%E9%8C%84.png)
我是使用 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
建立子目錄。
當然,這僅處理一級重定向。為了使其更加健壯,您必須遞歸檢查是否存在重定向。因此,如果您想以可靠的方式解決此問題,這不僅僅是命令列選項的問題。