通过wget下载实际名称的文件

通过wget下载实际名称的文件

我正在尝试使用 .NET 从网站通过 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,但我想用实际名称下载,并且不想手动更改下载文件的名称。

答案1

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,以便 shell 不会解释其中的&?字符。


使用等效的东西curl

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

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

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

下载文件后,您需要解压它:

tar -xvf GSE48191_RAW.tar

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

答案2

shell 对字符进行通常的解释,特别?是作为通配符(这在这里并不重要)和&“放入后台”。您应该已经注意到后者,因为 shell 响应与直接命令不同。

所以你需要引用:

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

相关内容