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

Neh*_*eha 11 wget filenames

我正在尝试通过 HTTP 从使用wget.

当我使用:

wget http://abc/geo/download/?acc=GSE48191&format=file
Run Code Online (Sandbox Code Playgroud)

我只得到一个名为index.html?acc=GSE48191.

当我使用:

wget http://abc/geo/download/?acc=GSE48191&format=file -o asd.rpm
Run Code Online (Sandbox Code Playgroud)

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

Kus*_*nda 31

wget --content-disposition 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'
Run Code Online (Sandbox Code Playgroud)

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

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

您还需要引用 URL,以便 shell 不会解释其中的&?字符。


使用等效的东西curl

curl -J -O 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'
Run Code Online (Sandbox Code Playgroud)

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

 curl --remote-header-name --remote-name 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'
Run Code Online (Sandbox Code Playgroud)

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

tar -xvf GSE48191_RAW.tar
Run Code Online (Sandbox Code Playgroud)

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


dir*_*rkt 8

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

所以你需要引用:

wget 'http://abc/geo/download/?acc=GSE48191&format=file'
Run Code Online (Sandbox Code Playgroud)