如何找出文件的 MIME 类型(内容类型) ?

有没有办法找出 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
152220 次浏览

使用 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

你可以使用的另一个工具(除了文件)是 xdg-mime

例如 xdg-mime query filetype <file>

如果你有好吃的,

yum install xdg-utils.noarch

Xdg-mime 与 Subrip (subtitle)文件上的 file 的示例比较

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


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

在上述文件中只显示为纯文本。

尝试使用 -i选项执行 file命令。

-i选项使 file 命令输出 mime 类型的字符串,而不是更传统的人类可读的字符串。因此它可能说 text/plain; charset=us-ascii而不是 ASCII text

文件—— mime 可以工作,但不是—— mime-type。至少对我的 RHEL 5来说是这样。

File version < 5: file-i-b/path/to/file
File version > = 5: file —— mime-type-b/path/to/file

为了检测 MIME 类型,使用命名得当的“ 打字机”命令。

它有很多格式化输出的选项,甚至还有向下兼容“文件”的选项。

但最重要的是,它不仅接受文件形式的输入,而且还通过 stdin/tube 接受输入,因此在处理流时可以避免使用临时文件。