Как мне узнать MIME-тип файла (Content-Type)?

108

Есть ли способ узнать тип MIME (или он называется «Content-Type»?) Файла в сценарии Linux bash?

Причина, по которой мне это нужно, заключается в том, что ImageShack, похоже, нужен для загрузки файла, поскольку по какой-то причине он обнаруживает файл .png как application/octet-streamфайл.

Я проверил файл, и это действительно изображение PNG:

$ cat /1.png 
?PNG
(with a heap load of random characters)

Это дает мне ошибку:

$ curl -F "fileupload=@/1.png" http://www.imageshack.us/upload_api.php
<links>
<error id="wrong_file_type">Wrong file type detected for file 1.png:application/octet-stream</error>
</links>

Это работает, но мне нужно указать MIME-TYPE.

$ curl -F "fileupload=@/1.png;type=image/png" http://www.imageshack.us/upload_api.php
Мята
источник

Ответы:

230

Используйте file. Примеры:

> file --mime-type image.png
image.png: image/png

> file -b --mime-type image.png
image/png

> file -i FILE_NAME
image.png: image/png; charset=binary
бхупс
источник
Нет, если вы используете Git bash под окнами.
tivo
1
Чтобы получить только мим-тип, вы могли бы сделать:file --mime-type FILE_NAME | awk '{print $2}'
Джастин Дженкинс,
23
@JustinJenkins -b опускает имя файла, поэтому file -b --mime-type FILE_NAMEвозвращает только тип пантомимы
jaygooby
илиkmimetypefinder filename
bitek
Не узнает application/xmlилиtext/xml
Цзэн
24

один из других инструментов (помимо файла), который вы можете использовать, это xdg-mime

например xdg-mime query filetype <file>

если у тебя есть вкусняшка,

yum install xdg-utils.noarch

Пример сравнения xdg-mime и файла в файле Subrip (субтитры)

$ xdg-mime query filetype subtitles.srt
application/x-subrip

$ file --mime-type subtitles.srt
subtitles.srt: text/plain

в приведенном выше файле отображать его только как обычный текст.

призрачная собака74
источник
xdg-mime query filetype install.sql; xprop: невозможно открыть дисплей '',
кодировщик
xdg-mime - это сценарий bash, который сильно зависит от переменных среды. Некоторые из них, например DE, не устанавливаются, если вы не вошли в сеанс. Проверьте сами$ less $(which xdg-mime)
ManuelSchneid3r
10

версия файла <5: file -i -b / path / to / file
версия файла> = 5: file --mime-type -b / path / to / file

Андрей
источник
1
что вы имеете в виду под версией файла?
user2867106
1
@ user2867106 Я думаю, он имел ввиду версию команды file.
забег jgh fun-run
4

Попробуйте fileкоманду с -iопцией.

-ioption Заставляет команду file выводить строки типа mime, а не более традиционные, удобочитаемые человеком. Таким образом, text/plain; charset=us-asciiскорее можно сказать , чем ASCII text.

codaddict
источник
2

file --mime работает, но не --mime-type. по крайней мере для моего RHEL 5.

фанчина
источник