我正在尝试通过 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
文件。
shell 对字符进行通常的解释,尤其是?
作为通配符(这里无关紧要)和&
“放入背景”。您应该已经注意到后者,因为 shell 响应与直接命令不同。
所以你需要引用:
wget 'http://abc/geo/download/?acc=GSE48191&format=file'
Run Code Online (Sandbox Code Playgroud)