如何下载没有完整 URL 的文件?

如何下载没有完整 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这个问题,但也没有成功。

答案1

您提供的 URL 可以很好地下载,例如:

wget "URL"
curl -O "URL"

正如评论中提到的:引用。总是引用!

像这样的字母&在 shell 中具有特殊含义,如果没有它们,URL 将不会被解释为您想要的。


至于不知道文件名就下载– 我仍然不太确定你的意思,但有一些注意事项:

这是特定地点对于 ebi.ac.uk

网址提供的是一种特殊形式统一资源标识符。您很可能对查询部分感兴趣,更具体地说是第一部分: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– 不会改变什么仅下载服务器->网络浏览器建议的名称,也可以由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

这是服务器将文件名建议返回给客户端的一种方式。如果您使用带有选项的curl版本,-J您可以使用此选项按此名称保存文件:即:

curl -OJ "URL"

如上所述

这是完全特定于站点的,并且服务器上解释 URL 的方式与站点的设置方式有关。

在不同的主机上使用带有查询部分的另一个设置,也可以为您提供从服务器filename=foo.txt命名的实际文件。foo.txt

对于这个网站 ebi.ac.uk,该文件不是一个文件,而是使用数据库查询动态生成的内容。查询结果被合并到一个文件中并提供给最终用户。

答案2

如果没有引号,shell 会看到&并将其解释为“在后台运行行中直到 & 的所有内容,然后继续解释/运行该行的其余部分”。如果加上引号,则&只是 URL 字符串的一部分。

您的 URL 中有 3 个&s,因此如果没有引号,它将运行四个命令,前三个作为后台作业:

wget http://www.ebi.ac.uk/ena/data/view/U00096.3 &
display=fasta &
download=fasta &
filename=entry.fasta

修复方法是引用 URL:

wget 'http://www.ebi.ac.uk/ena/data/view/U00096.3&display=fasta&download=fasta&filename=entry.fasta'

此处使用单引号即可,但如果您想在 URL 中嵌入任何变量的值,则需要使用双引号。

答案3

也许你可以小心使用递归下载的设施wget。所以如果你

wget -r http://gcc-melt.org/

gcc-melt.org您将从站点下载“每个”可访问的文件

(但请阅读的文档wget在尝试之前)

附言。我是该文件的所有者和作者http://gcc-melt.org/网站,因此请不要超载。

相关内容