Baixar arquivo com nome real por wget

9

Estou tentando baixar um arquivo através de HTTP de um site usando wget.

Quando eu uso:

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

Eu recebo apenas um arquivo chamado index.html?acc=GSE48191.

Quando eu uso:

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

Recebo asd.rpm, mas quero fazer o download com o nome real e não quero alterar manualmente o nome do arquivo baixado.

Neha
fonte
Você pode fazer esse tipo de pergunta sobre Bioinformática na próxima vez. Também está aqui, e é bem-vindo a ficar, mas você pode obter mais ajuda de pessoas que trabalham em campo.
terdon
3
@terdon Como está perguntando sobre o comportamento do wget e * nix shell no tópico Bioinformática ?
a CVn
1
@ MichaelKjörling extrair informações do NCBI seria, é por isso que sugeri. Uma resposta provavelmente envolveria uma abordagem mais simples e direta para obter as informações que o OP está procurando, em vez de uma solução shell. Algo como "você pode obter essas informações mais facilmente daqui", por exemplo.
terdon
Veja o --trust-server-namesargumento de wget:
ivanivan 26/09
3
É importante observar que não existe "o nome real" de um recurso referenciado por um URL. Um servidor da web responde a uma solicitação com algum conteúdo e, possivelmente, alguns cabeçalhos que descrevem esse conteúdo de alguma forma, mas não precisa haver um arquivo envolvido.
IMSOP

Respostas:

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

O arquivo que você está baixando é um tararchive (um arquivo binário), fornecido por um link dinâmico de um servidor da web. wgetnormalmente salvaria o arquivo usando parte da URL que você está usando, mas, nesse caso, é apenas um ponto de extremidade da API REST (ou algo semelhante); portanto, o nome seria hostil de se trabalhar (ainda seria um nome válido e o o conteúdo do arquivo seria o mesmo).

No entanto, nesse caso, o servidor fornece um cabeçalho "Disposição de conteúdo" contendo o nome do arquivo real, que wgetpoderá ser usado se você usar a --content-dispositionopção Esta opção está marcada como "experimental" no meu manual para wget.

Você também precisa citar o URL para que o shell não interprete os caracteres &e ?nele.


O equivalente usando curl:

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

Ou, usando as opções longas equivalentes:

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

Depois de baixar o arquivo, você precisa descompactá-lo:

tar -xvf GSE48191_RAW.tar

Devido à maneira como esse arquivo específico foi criado, isso descompactará os arquivos do diretório no diretório atual (portanto, criar um novo diretório, mover o arquivo para lá e descompactá-lo pode ser uma boa idéia). Os arquivos neste arquivo gzipmorto são CELarquivos compactados .

Kusalananda
fonte
8

O shell faz a interpretação usual dos caracteres, especialmente ?como curinga (que não importa aqui) e &como "colocado em segundo plano". Você deve ter notado o último, porque a resposta do shell é diferente de um comando direto.

Então você precisa citar:

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