¿Cómo puedo averiguar el tipo MIME de un archivo (tipo de contenido)?

107

¿Hay alguna forma de averiguar el tipo MIME (o se llama "Content-Type"?) De un archivo en un script bash de Linux?

La razón por la que lo necesito es porque ImageShack parece necesitarlo para cargar un archivo, ya que por alguna razón detecta el archivo .png como un application/octet-streamarchivo.

Revisé el archivo y realmente es una imagen PNG:

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

Esto me da el error:

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

Esto funciona, pero necesito especificar un TIPO MIME.

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

Respuestas:

228

Utilice file. Ejemplos:

> 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
fuente
No si usa el Git bash debajo de Windows.
tivo
1
Para obtener solo el tipo de mimo, puede hacer:file --mime-type FILE_NAME | awk '{print $2}'
Justin Jenkins
23
@JustinJenkins -b omite el nombre de archivo, por lo que file -b --mime-type FILE_NAMEdevuelve solo el tipo mime
jaygooby
okmimetypefinder filename
bitek
No reconoce application/xmlotext/xml
Tseng
24

una de las otras herramientas (además del archivo) que puede usar es xdg-mime

p.ej xdg-mime query filetype <file>

si tienes yum,

yum install xdg-utils.noarch

Un ejemplo de comparación de xdg-mime y archivo en un archivo Subrip (subtítulos)

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

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

en el archivo anterior solo lo muestra como texto sin formato.

ghostdog74
fuente
xdg-mime query filetype install.sql; xprop: no se puede abrir la pantalla ''
un codificador el
xdg-mime es un script bash que depende en gran medida de variables de entorno. Algunos de ellos, por ejemplo, DE, no se configuran si no ha iniciado sesión en una sesión. Compruébelo usted mismo$ less $(which xdg-mime)
ManuelSchneid3r
10

versión de archivo <5: archivo -i -b / ruta / a /
archivo versión de archivo> = 5: archivo --mime-type -b / ruta / a / archivo

Andrey
fuente
1
¿A qué te refieres con la versión del archivo?
user2867106
1
@ user2867106 Creo que se refiere a la versión del comando de archivo.
jgh fun-run
4

Pruebe el filecomando con -iopción.

-iopción Hace que el comando de archivo genere cadenas de tipo mime en lugar de las más tradicionales legibles por humanos. Por lo tanto, puede decir en text/plain; charset=us-asciilugar de ASCII text.

codaddict
fuente
2

file --mime funciona, pero no --mime-type. al menos para mi RHEL 5.

fanchyna
fuente