如何下載沒有完整 URL 的文件?
我一直想知道如何通過Linux shell(我有wget,curl)下載沒有要下載文件的完整URL的文件,但是只有在訪問特定URL時才會將完整URL傳遞給瀏覽器. 但是,當我嘗試通過 Linux shell(使用 wget 或 curl)下載它時,我得到的只是一個 HTML 文件。
例如,我希望從這裡下載幾個 MB 的大文件:
http://www.ebi.ac.uk/ena/data/view/U00096.3&display=fasta&download=fasta&filename=entry.fasta
所以當我將它粘貼到瀏覽器中時,我會看到另存為對話框,讓我保存“entry.fasta”文件而不是另一個 HTML 文件。我按照這個問題的建議嘗試了 curl -O -L -J ,但它也沒有用。
您提供的 URL 下載很好,例如:
wget "URL" curl -O "URL"
如評論中所述:引用。總是引用!
像這樣的字母
&
在 shell 中有特殊的含義,如果沒有它們,URL 將不會被解釋為你想要的。至於在不知道文件名的情況下下載——我仍然不太清楚你的意思,但有一些注意事項:
這是ebi.ac.uk的特定站點
提供的URL是一種特殊形式的URI。您最有可能對查詢部分感興趣,尤其是第一部分:
U00096.3
.您可以更改它以表示其他文件和範圍。比如下載
U00000
說U00096
:curl -O "http://www.ebi.ac.uk/ena/data/view/U00000-U00096&display=fasta&download=fasta&filename=U00000-U00096.fasta" ^^^^ data ^^^
文件名部分只是關於如何命名文件的建議。您可以將其更改為您想要的任何內容。例如:
filename=myown.fasta
- 不會更改下載的內容,僅更改伺服器建議的名稱 -> web-browser,也可以由 curl 等使用。該網站上有很多搜尋和列表的可能性,您必須四處尋找。
更多關於正在發生的事情
當您點擊下載連結,或使用 curl 或 wget 等工具時,會向位於 ebi.ac.uk 的伺服器發送特定文件的請求。在您的範例中,它可能有一個引用設置為:
http://www.ebi.ac.uk/ena/data/view/U00096.3
和一個 GET 查詢報告為:
query['display'] = fasta query['download'] = fasta query['filename'] = entry.fasta
伺服器會做出響應,其中包括:
Content-Disposition: attachment; filename=entry.fasta
這是伺服器將文件名建議返回給客戶端的一種方式。如果您使用具有該
-J
選項的 curl 版本,則可以使用它來按此名稱保存文件:即:curl -OJ "URL"
如前所述
這是特定於站點的,並且在伺服器上解釋 URL 的方式與站點的設置方式有關。
在不同的主機上使用另一個帶有查詢部分的設置,
filename=foo.txt
就像為您提供foo.txt
從伺服器命名的實際文件一樣。至於這個站點,ebi.ac.uk,該文件不是文件,而是使用對數據庫的查詢動態生成的內容。查詢的結果被合併到一個文件中並提供給最終使用者。