Télécharger le fichier avec le nom réel par wget

9

J'essaie de télécharger un fichier via HTTP à partir d'un site Web en utilisant wget.

Quand j'utilise:

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

Je reçois uniquement un fichier appelé index.html?acc=GSE48191.

Quand j'utilise:

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

J'obtiens asd.rpm, mais je veux télécharger avec le nom réel, et je ne veux pas avoir à changer manuellement le nom du fichier téléchargé.

Neha
la source
Vous voudrez peut-être poser ce type de question sur la bioinformatique la prochaine fois. C'est également sur le sujet ici, et bienvenue à rester, mais vous pourriez obtenir plus d'aide des personnes qui travaillent dans le domaine.
terdon
3
@terdon Comment pose-t-on des questions sur le comportement du shell wget et * nix sur le sujet de la bioinformatique ?
un CVn du
1
@ MichaelKjörling extraire des informations du NCBI serait, c'est pourquoi je l'ai suggéré. Une réponse impliquerait probablement une approche plus simple et plus directe pour obtenir les informations que le PO recherche plutôt qu'une solution shell. Quelque chose comme "vous pouvez obtenir ces informations plus facilement d'ici" par exemple.
terdon
Regardez l' --trust-server-namesargument de wget-
ivanivan
3
Il est important de noter qu'il n'existe pas de "nom réel" d'une ressource référencée par une URL. Un serveur Web répond à une demande avec du contenu, et éventuellement des en-têtes qui décrivent ce contenu d'une manière ou d'une autre, mais il n'est pas nécessaire qu'un fichier soit impliqué du tout.
IMSoP

Réponses:

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

Le fichier que vous téléchargez est une tararchive (un fichier binaire), fournie par un lien dynamique à partir d'un serveur Web. wgetenregistrerait normalement le fichier en utilisant une partie de l'URL que vous utilisez, mais dans ce cas, il s'agit simplement d'un point de terminaison REST API (ou quelque chose de similaire), de sorte que le nom ne serait pas convivial avec lequel travailler (ce serait toujours un nom valide et le le contenu du fichier serait le même).

Cependant, dans ce cas, le serveur fournit un en-tête "Content Disposition" contenant le nom de fichier réel, qui wgetpeut être utilisé si vous utilisez l' --content-dispositionoption. Cette option est marquée "expérimentale" dans mon manuel pour wget.

Vous devez également citer l'URL afin que le shell n'interprète pas les caractères &et ?.


La chose équivalente en utilisant curl:

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

Ou, en utilisant les options longues équivalentes:

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

Une fois le fichier téléchargé, vous devez le décompresser:

tar -xvf GSE48191_RAW.tar

En raison de la façon dont cette archive particulière a été créée, cela décompressera les fichiers de l'archive dans le répertoire actuel (donc créer un nouveau répertoire, y déplacer l'archive et la décompresser peut être une bonne idée). Les fichiers de cette archive sont des fichiers gzipcompressés CEL.

Kusalananda
la source
8

Le shell fait l'interprétation habituelle des caractères, en particulier en ?tant que caractère générique (ce qui n'a pas d'importance ici) et en &tant que «mis en arrière-plan». Vous devriez avoir remarqué ce dernier, car la réponse du shell est différente d'une commande directe.

Vous devez donc citer:

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