Como posso descobrir o tipo MIME de um arquivo (Content-Type)?

108

Existe uma maneira de descobrir o tipo MIME (ou é chamado de "Content-Type"?) De um arquivo em um script bash do Linux?

O motivo pelo qual preciso disso é porque o ImageShack parece precisar dele para fazer upload de um arquivo, pois por algum motivo ele detecta o arquivo .png como um application/octet-streamarquivo.

Verifiquei o arquivo e é realmente uma imagem PNG:

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

Isso me dá o erro:

$ 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>

Isso funciona, mas preciso especificar um MIME-TYPE.

$ curl -F "fileupload=@/1.png;type=image/png" http://www.imageshack.us/upload_api.php
hortelã
fonte

Respostas:

229

Use file. Exemplos:

> 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
bhups
fonte
Não se você usar o Git bash no Windows.
tivo
1
Para obter apenas o tipo de mímica, você pode fazer:file --mime-type FILE_NAME | awk '{print $2}'
Justin Jenkins
23
@JustinJenkins -b omite o nome do arquivo, então file -b --mime-type FILE_NAMEretorna apenas o tipo MIME
jaygooby
oukmimetypefinder filename
bitek
Não reconhece application/xmloutext/xml
Tseng
24

uma das outras ferramentas (além do arquivo) que você pode usar é xdg-mime

por exemplo xdg-mime query filetype <file>

se você tem yum,

yum install xdg-utils.noarch

Um exemplo de comparação de xdg-mime e arquivo em um arquivo Subrip (legendas)

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

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

no arquivo acima, mostre-o apenas como texto simples.

ghostdog74
fonte
xdg-mime query filetype install.sql; xprop: incapaz de abrir o display ''
um codificador de
xdg-mime é um script bash que depende muito de variáveis ​​de ambiente. Alguns deles, por exemplo, DE, não são definidos se você não estiver conectado a uma sessão. Verifique você mesmo$ less $(which xdg-mime)
ManuelSchneid3r
10

versão do arquivo <5: arquivo -i -b / caminho / para /
versão do arquivo do arquivo> = 5: arquivo --mime-type -b / caminho / para / arquivo

Andrey
fonte
1
o que você quer dizer com versão do arquivo?
user2867106
1
@ user2867106 Acho que ele quer dizer a versão do comando file.
jgh fun-run
4

Experimente o filecomando com -iopção.

-iopção Faz com que o comando file produza strings do tipo MIME em vez das mais tradicionais legíveis por humanos. Assim, pode-se dizer em text/plain; charset=us-asciivez de ASCII text.

codadicto
fonte
2

arquivo --mime funciona, mas não --mime-type. pelo menos para meu RHEL 5.

Fanchyna
fonte