я делаю
wget http://services.runescape.com/m=itemdb_rs/3809_obj_sprite.gif?id=2
и он загружает следующий файл:
3809_obj_sprite.gif?id=2
Как я могу сохранить это как следующее?
2.png
wget
выбирает это имя?К сожалению, wget
будет делать предположений о том, что вы хотите загрузить, если вы не скажете это. Не имеет значения, является ли ваш файл изображением, документом, заархивированным файлом и так далее.
Файл сохраняется как то, чем заканчивался URL-адрес - так что угодно, начиная с последней косой черты и заканчивая концом URL-адреса. В твоем случае это .gif?id=2
. Часть после фактического расширения файла (.gif
) содержится в URL, но это параметр HTTP-запроса . Однако для wget
он будет определять имя выходного файла.
Если вы хотите указать имя выходного файла для wget
, добавьте опцию -O
(прописные буквы O):
wget example.com/something.gif?id=2 -O 2.gif
Это переопределит поведение по умолчанию и установит имя файла в 2.gif
. Обратите внимание, что опция -o
(downcase) указывает имя выходного файла для любых сообщений журнала, которые wget
мог бы распечатать в оболочке.
Наконец, есть --content-disposition
которая может привести к тому, что будет установлено правильное имя файла. Но это полностью зависит от сервера, который вы загружаете, от отправки правильной информации заголовка:
Эта опция полезна для некоторых загружаемых файлов CGI-программ, которые используют заголовки Content-Disposition для описания того, каким должно быть имя загружаемого файла.
Эта опция в настоящее время все еще помечена как экспериментальная и поэтому не включена по умолчанию.
Я настоятельно рекомендую вам прочитать справочную страницу инструментов, которые вы используете, чтобы понять их поведение. Просто введите man wget
и прочитайте его, особенно те опции, которые он предоставляет.
Кроме того, чтобы обратиться к тому, что @Indrek написал в комментарии к вашему вопросу: я предполагаю, что у вас есть опечатка и вы не хотите загружать GIF-файл в файл с именем .png
- просто изменение расширения не сделает его автоматически PNG , GIF и PNG используют разные кодировки, и для преобразования между этими форматами вам понадобится любой инструмент преобразования изображений. Это преобразование, однако, будет без потерь, поэтому не будет никакого вреда при загрузке файлов в "неправильном" формате и последующем преобразовании.
Существует параметр командной строки --content-disposition
который - если веб-сайт предоставляет правильный заголовок - должен обеспечить сохранение вашего файла с правильным именем.
Мой debian squeeze box говорит, что опция "экспериментальная", хотя ...
Это просто потому, что посмотрите на путь, он заканчивается?id = 2, поэтому он будет сохранен как этот, вы можете переместить файл или использовать параметр -O, чтобы определить имя файла.
curl
также есть возможность угадать имя файла из заголовка Content-Disposition
:
curl -OLJ http://services.runescape.com/m=itemdb_rs/3809_obj_sprite.gif?id=2
Вот
-O
говорит curl сохранять в файл, а не сбрасывать в стандартный вывод
-L
заставляет его следовать перенаправлениям
-J
позволяет угадывать по Content-Disposition
вместо разбора URL
Если файл, который вы указываете для загрузки для wget, действительно является изображением, то он загружает изображение. wget не пытается угадать правильное имя файла и расширение, он использует то, что находит в URL, например, http://foobar.com/photo.php?n=cat.png
вы можете получить что-то вроде photo.php?n=cat.png
но это все еще изображение. Чтобы решить вашу проблему, просто переименуйте этот файл в правильное имя cat.png
. Обратите внимание, что в большинстве операционных систем программам необходимо правильное расширение файла, чтобы знать, что они могут открыть данный файл.
Кроме того, с помощью curl
, скажем, вы не знаете, каким будет имя файла, из-за перенаправлений или чего-то еще... просто следуйте за перенаправлениями через -L
и направьте его в файл с правильным расширением.
curl -L http://links.mrgray.com/ocrtest > /files/file.png
wget
может иметь аналогичную функциональность, не знаю.