Скачать файл с реальным именем по wget

9

Я пытаюсь загрузить файл через HTTP с веб-сайта, используя wget.

Когда я использую:

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

Я получаю только файл с именем index.html?acc=GSE48191.

Когда я использую:

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

Я получаю asd.rpm, но я хочу скачать с реальным именем, и не хочу вручную изменять имя загруженного файла.

Неху
источник
Возможно, вы захотите задать такой вопрос о биоинформатике в следующий раз. Здесь также есть тема, и мы можем остаться, но вы можете получить больше помощи от людей, которые работают на местах.
Тердон
3
@terdon Как спросить о поведении оболочки wget и * nix по теме о биоинформатике ?
CVn
1
@ MichaelKjörling будет извлекать информацию из NCBI, поэтому я и предложил это. Ответ, скорее всего, будет заключаться в более простом, более прямом подходе к получению информации, которую ищет OP, а не в виде решения оболочки. Например, что-то вроде «отсюда легче получить эту информацию».
Тердон
Посмотрите на --trust-server-namesаргумент wget-
ivanivan
3
Важно отметить, что не существует такой вещи, как «фактическое имя» ресурса, на который ссылается URL. Веб-сервер отвечает на запрос некоторым контентом и, возможно, некоторыми заголовками, которые каким-то образом описывают этот контент, но файл вообще не должен быть задействован.
IMSoP

Ответы:

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

Загружаемый файл представляет собой tarархив (двоичный файл), предоставленный динамической ссылкой с веб-сервера. wgetобычно сохраняет файл, используя часть URL-адреса, который вы используете, но в этом случае это просто конечная точка API REST (или что-то подобное), поэтому имя будет работать недружелюбно (оно все равно будет действительным именем и содержимое файла будет таким же).

Однако в этом случае сервер предоставляет заголовок «Content Disposition», содержащий фактическое имя файла, который wgetможно использовать, если вы используете эту --content-dispositionопцию. Эта опция помечена как «экспериментальная» в моем руководстве для wget.

Кроме того, необходимо процитировать URL , так что оболочка не интерпретировать &и ?символы в нем.


Эквивалентная вещь, использующая curl:

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

Или, используя эквивалентные длинные параметры:

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

После того, как вы скачали файл, вам нужно распаковать его:

tar -xvf GSE48191_RAW.tar

В связи с тем, как был создан этот конкретный архив, это позволит распаковать файлы архива в текущий каталог (поэтому может быть хорошей идеей будет создать новый каталог, переместить туда архив и распаковать его). Файлы в этом архиве являются gzipсжатыми CELфайлами.

Кусалананда
источник
8

Оболочка выполняет обычную интерпретацию символов, особенно ?как подстановочный знак (который здесь не имеет значения) и &как «помещено в фон». Вы должны были заметить последнее, потому что ответ оболочки отличается от прямой команды.

Так что вам нужно процитировать:

wget 'http://abc/geo/download/?acc=GSE48191&format=file'
dirkt
источник