Descargar archivo con nombre real por wget

9

Estoy tratando de descargar un archivo a través de HTTP desde un sitio web usando wget.

Cuando uso:

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

Solo recibo un archivo llamado index.html?acc=GSE48191.

Cuando uso:

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

Obtengo asd.rpm, pero quiero descargar con el nombre real, y no quiero cambiar manualmente el nombre del archivo descargado.

Neha
fuente
Es posible que desee hacer este tipo de preguntas sobre bioinformática la próxima vez. También es un tema aquí, y bienvenido a quedarse, pero es posible que reciba más ayuda de las personas que trabajan en el campo.
terdon
3
@terdon ¿Cómo se pregunta sobre el comportamiento de wget y * nix shell en el tema de Bioinformática ?
un CVn
1
@ MichaelKjörling extraería información de NCBI sería, por eso lo sugerí. Una respuesta allí probablemente implicaría un enfoque más simple y directo para obtener la información que el OP está buscando en lugar de una solución de shell. Algo como "puede obtener esta información más fácilmente desde aquí", por ejemplo.
terdon
Mira el --trust-server-namesargumento para wget-
ivanivan
3
Es importante tener en cuenta que no existe el "nombre real" de un recurso al que hace referencia una URL. Un servidor web responde a una solicitud con algún contenido, y posiblemente algunos encabezados que describen ese contenido de alguna manera, pero no tiene que haber un archivo involucrado en absoluto.
IMSoP

Respuestas:

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

El archivo que está descargando es un tararchivo (un archivo binario), proporcionado por un enlace dinámico desde un servidor web. wgetnormalmente guardaría el archivo usando parte de la URL que está usando, pero en este caso es solo un punto final de la API REST (o algo similar), por lo que el nombre sería poco amigable para trabajar (aún sería un nombre válido y el el contenido del archivo sería el mismo).

Sin embargo, en este caso, el servidor proporciona un encabezado de "Disposición de contenido" que contiene el nombre real del archivo, que wgetpuede usar si usa la --content-dispositionopción. Esta opción está marcada como "experimental" en mi manual para wget.

También debe citar la URL para que el shell no interprete los caracteres &y ?.


Lo equivalente usando curl:

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

O, usando las opciones largas equivalentes:

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

Una vez que haya descargado el archivo, debe descomprimirlo:

tar -xvf GSE48191_RAW.tar

Debido a la forma en que se creó este archivo en particular, esto descomprimirá los archivos del archivo en el directorio actual (por lo que puede ser una buena idea crear un nuevo directorio, mover el archivo allí y desempaquetarlo). Los archivos de este archivo son gzipcomprimido con CELarchivos.

Kusalananda
fuente
8

El shell realiza la interpretación habitual de los caracteres, especialmente ?como comodín (que no importa aquí) y &como "poner en segundo plano". Deberías haber notado esto último, porque la respuesta del shell es diferente de un comando directo.

Entonces necesita citar:

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