5

я делаю

wget http://services.runescape.com/m=itemdb_rs/3809_obj_sprite.gif?id=2

и он загружает следующий файл:

3809_obj_sprite.gif?id=2

Как я могу сохранить это как следующее?

2.png

6 ответов6

40

Почему 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 используют разные кодировки, и для преобразования между этими форматами вам понадобится любой инструмент преобразования изображений. Это преобразование, однако, будет без потерь, поэтому не будет никакого вреда при загрузке файлов в "неправильном" формате и последующем преобразовании.

5

Существует параметр командной строки --content-disposition который - если веб-сайт предоставляет правильный заголовок - должен обеспечить сохранение вашего файла с правильным именем.

Мой debian squeeze box говорит, что опция "экспериментальная", хотя ...

3

Это просто потому, что посмотрите на путь, он заканчивается?id = 2, поэтому он будет сохранен как этот, вы можете переместить файл или использовать параметр -O, чтобы определить имя файла.

1

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

1

Если файл, который вы указываете для загрузки для wget, действительно является изображением, то он загружает изображение. wget не пытается угадать правильное имя файла и расширение, он использует то, что находит в URL, например, http://foobar.com/photo.php?n=cat.png вы можете получить что-то вроде photo.php?n=cat.png но это все еще изображение. Чтобы решить вашу проблему, просто переименуйте этот файл в правильное имя cat.png . Обратите внимание, что в большинстве операционных систем программам необходимо правильное расширение файла, чтобы знать, что они могут открыть данный файл.

-1

Кроме того, с помощью curl , скажем, вы не знаете, каким будет имя файла, из-за перенаправлений или чего-то еще... просто следуйте за перенаправлениями через -L и направьте его в файл с правильным расширением.

curl -L http://links.mrgray.com/ocrtest > /files/file.png

wget может иметь аналогичную функциональность, не знаю.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .