Wie kann ich den MIME-Typ (Content-Type) einer Datei ermitteln?

107

Gibt es eine Möglichkeit, den MIME-Typ (oder heißt er "Content-Type"?) Einer Datei in einem Linux-Bash-Skript herauszufinden?

Der Grund, warum ich es brauche, ist, dass ImageShack es anscheinend zum Hochladen einer Datei benötigt, da es aus irgendeinem Grund die PNG-Datei als application/octet-streamDatei erkennt .

Ich habe die Datei überprüft und es ist wirklich ein PNG-Bild:

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

Das gibt mir den Fehler:

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

Dies funktioniert, aber ich muss einen MIME-TYPE angeben.

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

Antworten:

228

Verwenden Sie file. Beispiele:

> 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
quelle
Nicht, wenn Sie die Git-Bash unter Windows verwenden.
tivo
1
Um nur den Pantomimentyp zu erhalten, können Sie Folgendes tun:file --mime-type FILE_NAME | awk '{print $2}'
Justin Jenkins
23
@ JustinJenkins -b lässt den Dateinamen weg, file -b --mime-type FILE_NAMEgibt also nur den
MIME-
oderkmimetypefinder filename
Bitek
Erkennt nicht application/xmlodertext/xml
Tseng
24

Eines der anderen Tools (neben der Datei), das Sie verwenden können, ist xdg-mime

z.B xdg-mime query filetype <file>

wenn du lecker bist,

yum install xdg-utils.noarch

Ein Beispielvergleich von xdg-mime und Datei in einer Subrip-Datei (Untertitel)

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

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

In der obigen Datei wird es nur als einfacher Text angezeigt.

Ghostdog74
quelle
xdg-mime query Dateityp install.sql; xprop: Anzeige '' kann nicht geöffnet werden
ein Codierer
xdg-mime ist ein Bash-Skript, das sich stark auf Umgebungsvariablen stützt. Einige von ihnen, z. B. DE, werden nicht festgelegt, wenn Sie nicht in einer Sitzung angemeldet sind. $ less $(which xdg-mime)
Überzeugen
10

Dateiversion <5: Datei -i -b / Pfad / zu / Datei
Dateiversion> = 5: Datei --mime-Typ -b / Pfad / zu / Datei

Andrey
quelle
1
Was meinst du mit Dateiversion?
user2867106
1
@ user2867106 Ich denke, er meint die Version des Dateibefehls.
JGH Fun-Run
4

Versuchen Sie den fileBefehl mit -iOption.

-iOption Bewirkt, dass der Befehl file anstelle von herkömmlichen Zeichenfolgen vom Typ MIME Zeichenfolgen vom Typ MIME ausgibt. So kann es text/plain; charset=us-asciieher sagen als ASCII text.

Codaddict
quelle
2

Datei --mime funktioniert, aber nicht --mime-type. Zumindest für mein RHEL 5.

Fanchyna
quelle