Linux bashshell中区分pst和dbx文件的正确方法

Linux bashshell中区分pst和dbx文件的正确方法,linux,bash,detection,file-format,Linux,Bash,Detection,File Format,我想确定给定给shell脚本的输入文件的文件格式-是.pst还是.dbx文件。我查过了。其中一个处理txt文件,并给出了两种方法- 检查扩展名是否为txt 检查mime类型是否为application/text等 我在.pst和.dbx文件上尝试了文件-ib,它显示了这两个文件的应用程序/octet流。但是,如果我只做文件,那么 这是针对dbx文件的- file1.dbx: Microsoft Outlook Express DBX File Message database 这是

我想确定给定给shell脚本的输入文件的文件格式-是
.pst
还是
.dbx
文件。我查过了。其中一个处理
txt
文件,并给出了两种方法-

  • 检查扩展名是否为
    txt

  • 检查mime类型是否为
    application/text

    我在
    .pst
    .dbx
    文件上尝试了
    文件-ib
    ,它显示了这两个文件的
    应用程序/octet流。但是,如果我只做
    文件
    ,那么

这是针对dbx文件的-

file1.dbx: Microsoft Outlook Express DBX File Message database  
这是pst文件的一部分-

file2.pst: Microsoft Outlook binary email folder (Outlook >=2003)
所以,我的问题是-

  • 当输出可以是任何内容并且我们需要进行适当检查时,使用mime类型检测是否更好

  • 在这种情况下如何应用mime类型检查-都返回“应用程序/八位字节流”

更新
我不想进行基于扩展名的检测,因为在Unix系统上,我们似乎无法确定.dbx文件是否真的是dbx文件。因为
文件
返回一行,其中包含文件的正确信息(例如“Microsoft Outlook Express DBX文件消息数据库”)。这意味着file命令能够正确识别文件类型。那么为什么它不能在
文件-ib
命令中获得正确的信息呢?

解析
文件的字符串输出可以吗?假设我只需要识别outlook系列的一组狭窄的数据存储文件(MS outlook Express、MS Office outlook 20032007202010等),是否可取。像
application/dbx
这样可以比较的小文本标识符就是我所需要的。

file
命令依赖于拥有一个文件类型检测数据库,该数据库包含您希望遇到的文件类型的规则。如果文件内容在文件开头附近没有唯一的代码,则可能无法识别这些文件类型

请注意,用于发出mime类型的-i选项实际上使用一个单独的“魔法”数字文件来识别文件类型,而不是将长描述转换为文件类型。这两个数据库很可能不同步。如果您的应用程序确实需要识别这两种文件类型,我建议您查看Linux源代码中的“文件”以了解它们是如何识别的,然后将此识别算法编码到您的应用程序中


如果您想执行相当于
DOS
文件类型检测的操作,请去掉文件名的扩展名(最后一个句点之后的所有内容)然后在您自己的表中查找该字符串,您可以在其中定义所需的类型。

file
命令依赖于拥有一个文件类型检测数据库,该数据库包含您希望遇到的文件类型的规则。如果文件内容在文件开头附近没有唯一的代码,则可能无法识别这些文件类型

请注意,用于发出mime类型的-i选项实际上使用一个单独的“魔法”数字文件来识别文件类型,而不是将长描述转换为文件类型。这两个数据库很可能不同步。如果您的应用程序确实需要识别这两种文件类型,我建议您查看Linux源代码中的“文件”以了解它们是如何识别的,然后将此识别算法编码到您的应用程序中


如果您想执行与DOS文件类型检测等效的操作,请去掉文件名的扩展名(上一个句点之后的所有内容),并在您自己的表中查找该字符串,在该表中定义所需的类型。

由于它们都是二进制文件,因此将返回这两个文件的
应用程序/八位字节流
,而且它还没有被指示去做其他的事情。没有任何东西可以阻止您将其添加到系统的
magic.mime
(除了dbx/pst文件类型没有实际的mime类型之外)它将返回这两个文件的
应用程序/八位字节流
,因为它们都是二进制文件,并且没有指示它执行其他操作。没有什么可以阻止您将其添加到系统的
magic.mime
(除了没有dbx/pst文件类型的实际mime类型)