通常,人們會下載一個 URL 以檔案副檔名結尾的檔案。
要下載 Ubuntu ISO,很簡單
wget http://releases.ubuntu.com/14.04.3/ubuntu-14.04.3-desktop-amd64.iso
然而,我遇到了一個我懷疑使用 ASP.Net / IIS 的網站。
ISO 的連結採用這種形式(我刪除了連結內容,以防......政策):
http://some.ip.in.here/website.com/IMAGENAME.ISO?md5=hUhpyFjk7zEskw06ZhrWAQ&expires=1454811899
我不知道如何下載這個,因為它有 MD5 和過期時間作為參數,所以 wget 只下載網頁,而不下載這個 ISO。
有什麼建議麼?
答案1
使用
wget "http://some.ip.in.here/website.com/IMAGENAME.ISO?md5=hUhpyFjk7zEskw06ZhrWAQ&expires=1454811899"
解釋: URL 中有「&」字元。在 Linux 和類似系統上,這使其成為後台進程。
解決方案是將 url 用雙引號 ( "
) 括起來,以便將其視為一個參數。
答案2
如果您只是想透過複雜的 URL 取得合理的檔案名,您可以使用輸出文件選項。
-O file
--output-document=file
這兩種形式中的任何一種都可以。
如前所述,請確保命令解析器不會解釋 URL 中的任何特殊字元。
答案3
有兩種方法可以使用捲曲。
在第一種方法中,您將-O
標記根據 URL 中的遠端名稱寫出檔案;在這種情況下,它很可能將文件寫到系統中IMAGENAME.ISO?md5=hUhpyFjk7zEskw06ZhrWAQ&expires=1454811899
:請注意 URL 值如何包含在雙引號中,因為&
並且?
可能會被誤解為 Bash 命令:
curl -O -L "http://some.ip.in.here/website.com/IMAGENAME.ISO?md5=hUhpyFjk7zEskw06ZhrWAQ&expires=1454811899";
雖然這種方法在技術上“有效”,但文件名充其量是令人困惑的。因此,在另一種方法中,您將使用輸出重定向(>
URL 後面跟著檔案名稱)將檔案內容輸出到名為 的檔案IMAGENAME.ISO
:
curl -L "http://some.ip.in.here/website.com/IMAGENAME.ISO?md5=hUhpyFjk7zEskw06ZhrWAQ&expires=1454811899" > "IMAGENAME.ISO";
因此,如果您問我,第二種方法最適合大多數普通使用。另請注意-L
兩個命令中使用的標誌;該命令告訴 Curl 遵循文件下載 URL 可能具有的任何重定向鏈接,因為很多時候下載服務上的文件在到達目標負載文件之前會重定向幾次。