为什么“file --mime-type”和“xdg-mime query filetype”的结果不同?

Mat*_*fou 4 mime-type

我正在尝试查找文件的 MIME 类型。我使用了“file --mime-type”或“xdg-mime”,但得到了不同的答案?我不确定明白吗?

$ file --mime-type -b gePlugin.kmz 
  application/zip
$ xdg-mime query filetype gePlugin.kmz 
  application/vnd.google-earth.kmz
Run Code Online (Sandbox Code Playgroud)

为什么我有不同的答案?我应该依赖哪一个?

为什么有区别?

谢谢!


更新(由 cipricus):

iso文件示例:

file --mime-type -b MY_ISO.isoGive application/x-iso9660-image,这对用于上下文菜单操作的桌面文件没有用。

xdg-mime query filetype MY_ISO.isoGive model/x.stl-binary,它与 te 相同的桌面一起用于上下文菜单操作。

xio*_*ota 6

xdg-mime@jdpipe 关于和的行为似乎是正确的file。\xe2\x80\x82还有另一个实用程序mimetype,其行为与 类似xdg-mime

\n\n

至于“信任”哪个实用程序,通常只使用mimetype或 就可以了xdg-mime\xe2\x80\x82但是,如果您担心文件的扩展名可能错误,请使用,file因为它会在报告其类型之前检查文件的内容。\xe2\x80\x82例如,如果 apng重命名为jpg,则file可以正确报告“image/png”,但xdg-mime两者mimetype错误地报告“image/jpeg”。

\n\n

正如@db429 所指出的,对于您引用的文件来说,这两个实用程序似乎都是正确的kmz。\xe2\x80\x82Google 地球会创建kmz文件,这些文件也被重命名zip为文件。\xe2\x80\x82 您要对信息执行的操作决定了哪个应用程序使用。\xe2\x80\x82如果您想提取内容,则file告诉您继续使用unzip。\xe2\x80\x82如果您想按最初的预期查看和使用信息,请使用 Google 地球或其他有能力的程序使用kmz文件。

\n\n

关于该iso文件,我不知道为什么xdg-mime告诉你model/x.stl-binary。\xe2\x80\x82在我的计算机上,它报告application/x-cd-image。\xe2\x80\x82此外,file不使用该--mime-type标志会报告确认它是某种类型的磁盘映像的附加信息。\ xe2\x80\x82也许更新 mime 数据库会有所帮助:

\n\n
sudo update-mime-database /usr/share/mime\n
Run Code Online (Sandbox Code Playgroud)\n


jdp*_*ipe 5

xdg-mime来自的实用程序xdg-utils是一个更全面的程序,它考虑到了您的桌面环境(GNOME 及其亲属,或 KDE)。在某些情况下,它会调用file实用程序,但在其他情况下,它会查找特定系统的 mimetype 数据库。

file据我所知,该实用程序只查看您的文件内部,而不查看文件名。因此,该.kmz文件被识别为 zip 文件。file使用与特定文件类型相关联的“魔术数字”,例如,P5文件开头的魔术字符串与来自 Netpbm 库的 PGM 图像相关联。

mimetype 数据库知道使用文件扩展名标识的更高级别的文件类型,并且可以由用户自定义。安装新程序时,mimetype 数据库会得到扩展,并会给出在安装某些软件之前可能不会给出的答案。据我所知,该行为不会发生在file命令中。

如果你想阅读更多,xdg-mime细节在这里——源代码。您可以看到它file在某些情况下会调用。