Scarica il file con il nome reale di wget


9

Sto cercando di scaricare un file tramite HTTP da un sito Web utilizzando wget.

Quando uso:

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

Ricevo solo un file chiamato index.html?acc=GSE48191.

Quando uso:

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

Ottengo asd.rpm, ma voglio scaricare con il nome reale e non voglio aver cambiato manualmente il nome del file scaricato.


Potresti voler fare questo tipo di domande sulla bioinformatica la prossima volta. È anche in tema qui, e benvenuti a rimanere, ma potresti ottenere più aiuto dalle persone che lavorano sul campo.
Terdon

3
@terdon Come si chiede il comportamento della shell wget e * nix sull'argomento sulla bioinformatica ?
un CVn il

1
@ MichaelKjörling sarebbe l'estrazione di informazioni dall'NCBI, ecco perché l'ho suggerito. Una risposta potrebbe probabilmente implicare un approccio più semplice e diretto per ottenere le informazioni che l'OP sta cercando piuttosto che una soluzione shell. Qualcosa come "puoi ottenere queste informazioni più facilmente da qui" per esempio.
Terdon

Guarda l' --trust-server-namesargomento di wget-
Ivanivan il

3
È importante notare che non esiste un "nome reale" di una risorsa a cui fa riferimento un URL. Un server Web risponde a una richiesta con alcuni contenuti e, eventualmente, alcune intestazioni che descrivono in qualche modo quel contenuto, ma non è necessario che sia coinvolto un file.
IMSoP,

Risposte:


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

Il file che stai scaricando è un tararchivio (un file binario), fornito da un collegamento dinamico da un server web. wgetnormalmente salverebbe il file usando parte dell'URL che si sta utilizzando, ma in questo caso si tratta solo di un endpoint dell'API REST (o qualcosa di simile), quindi il nome non sarebbe amichevole con cui lavorare (sarebbe comunque un nome valido e il il contenuto del file sarebbe lo stesso).

Tuttavia, in questo caso il server fornisce un'intestazione "Disposizione contenuto" contenente il nome file effettivo, che wgetè possibile utilizzare se si utilizza l' --content-dispositionopzione. Questa opzione è contrassegnata come "sperimentale" nel mio manuale di wget.

È inoltre necessario citare l'URL in modo che la shell non interpreti i caratteri &e ?in esso.


La cosa equivalente usando curl:

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

Oppure, utilizzando le opzioni lunghe equivalenti:

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

Dopo aver scaricato il file, è necessario decomprimerlo:

tar -xvf GSE48191_RAW.tar

A causa del modo in cui è stato creato questo particolare archivio, questo decomprimerà i file dell'archivio nella directory corrente (quindi creare una nuova directory, spostare l'archivio lì e decomprimerlo potrebbe essere una buona idea). I file in questo archivio sono file gzipcompressi CEL.


8

La shell fa la solita interpretazione dei personaggi, specialmente ?come jolly (che non ha importanza qui) e &come "messo in secondo piano". Avresti dovuto notare quest'ultimo, perché la risposta della shell è diversa da un comando diretto.

Quindi devi citare:

wget 'http://abc/geo/download/?acc=GSE48191&format=file'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.