Bash

如何下載沒有完整 URL 的文件?

  • November 8, 2015

我一直想知道如何通過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.

您可以更改它以表示其他文件和範圍。比如下載U00000U00096

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,該文件不是文件,而是使用對數據庫的查詢動態生成的內容。查詢的結果被合併到一個文件中並提供給最終使用者。

引用自:https://unix.stackexchange.com/questions/241538