用wget下载具有真实名称的文件


9

我正在尝试使用从Web站点通过HTTP下载文件wget

当我使用时:

wget http://abc/geo/download/?acc=GSE48191&format=file

我只有一个名为的文件index.html?acc=GSE48191

当我使用时:

wget http://abc/geo/download/?acc=GSE48191&format=file -o asd.rpm

我得到了asd.rpm,但是我想使用实际名称下载,并且不想手动更改下载文件的名称。


下次您可能要问有关生物信息学的这类问题。它也是这里的主题,欢迎您留下来,但是您可能会从该领域的工作人员那里获得更多帮助。
terdon

3
@terdon在有关生物信息学的主题上如何询问wget和* nix shell行为?
CVn

1
@MichaelKjörling是从NCBI提取信息的,这就是为什么我建议这样做。那里的答案可能会涉及一种更简单,更直接的方法来获取OP所需的信息,而不是Shell解决方案。例如,诸如“您可以从这里更轻松地获取此信息”之类的东西。
terdon

--trust-server-names参数wget-
ivanivan

3
重要的是要注意,URL所引用的资源不存在“实际名称”之类的东西。Web服务器用一些内容来响应请求,并可能以某种方式响应某些描述该内容的标头,但是根本不需要涉及文件。
IMSoP

Answers:


30
wget --content-disposition 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'

您正在下载的文件是tar归档文件(二进制文件),由Web服务器上的动态链接提供。wget通常会使用您所使用的URL的一部分来保存文件,但是在这种情况下,这只是REST API端点(或类似名称),因此该名称不便于使用(它仍然是有效名称,并且文件内容将是相同的)。

但是,在这种情况下,服务器提供了一个“ Content Disposition”标头,其中包含实际的文件名,wget如果您使用该--content-disposition选项,则可以使用。在我的手册中,此选项标记为“实验性” wget

您还需要引用URL,以便外壳程序不解释其中的&?字符。


等效使用curl

curl -J -O 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'

或者,使用等效的long选项:

 curl --remote-header-name --remote-name 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'

下载文件后,需要将其解压缩:

tar -xvf GSE48191_RAW.tar

由于此特定档案的创建方式,这会将档案的文件解压缩到当前目录中(因此,创建一个新目录,将档案移到该目录并解压缩可能是个好主意)。此存档中的文件是gzip-compressed CEL文件。


8

Shell对字符进行通常的解释,尤其?是通配符(在这里无关紧要)和&“放入背景”。您应该已经注意到了后者,因为shell响应不同于直接命令。

因此,您需要引用:

wget 'http://abc/geo/download/?acc=GSE48191&format=file'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.