Я пытаюсь загрузить файл через 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
, но я хочу скачать с реальным именем, и не хочу вручную изменять имя загруженного файла.
--trust-server-names
аргументwget
-Ответы:
Загружаемый файл представляет собой
tar
архив (двоичный файл), предоставленный динамической ссылкой с веб-сервера.wget
обычно сохраняет файл, используя часть URL-адреса, который вы используете, но в этом случае это просто конечная точка API REST (или что-то подобное), поэтому имя будет работать недружелюбно (оно все равно будет действительным именем и содержимое файла будет таким же).Однако в этом случае сервер предоставляет заголовок «Content Disposition», содержащий фактическое имя файла, который
wget
можно использовать, если вы используете эту--content-disposition
опцию. Эта опция помечена как «экспериментальная» в моем руководстве дляwget
.Кроме того, необходимо процитировать URL , так что оболочка не интерпретировать
&
и?
символы в нем.Эквивалентная вещь, использующая
curl
:Или, используя эквивалентные длинные параметры:
После того, как вы скачали файл, вам нужно распаковать его:
В связи с тем, как был создан этот конкретный архив, это позволит распаковать файлы архива в текущий каталог (поэтому может быть хорошей идеей будет создать новый каталог, переместить туда архив и распаковать его). Файлы в этом архиве являются
gzip
сжатымиCEL
файлами.источник
Оболочка выполняет обычную интерпретацию символов, особенно
?
как подстановочный знак (который здесь не имеет значения) и&
как «помещено в фон». Вы должны были заметить последнее, потому что ответ оболочки отличается от прямой команды.Так что вам нужно процитировать:
источник