2011-02-01 25 views
0

我想识别给予我的shell脚本的输入文件的文件格式 - 无论是.pst还是.dbx文件。我检查了How to check the extension of a filename in a bash script?。这一个处理与txt文件和两个方法给出了那里 -在bash shell中区分pst和dbx文件的正确方法

  • 检查是否扩展名txt
  • 检查,如果MIME类型为application/text

    我在.pst和尝试file -ib <filename>.dbx文件,它显示两者都为application/octet-stream。但是,如果我只是做file <filename>,然后我得到

此为DBX文件 -

file1.dbx: Microsoft Outlook Express DBX File Message database 

这对于pst文件 -

file2.pst: Microsoft Outlook binary email folder (Outlook >=2003) 

所以,我的问题是 -

  • it it bett呃每次使用MIME类型检测时输出可以是任何东西,我们需要一个适当的检查?

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

更新
我不想做一个延伸为基础的检测,因为它似乎我们只是不能确定在Unix系统上,一个.dbx文件是一个真正的dbx文件。由于file <filename>返回包含文件正确信息的行(例如“Microsoft Outlook Express DBX文件消息数据库”)。这意味着文件命令能够正确识别文件类型。那么为什么在file -ib <filename>命令中没有得到正确的信息呢?
分析字符串输出file <filename>会罚款吗?假设我只需要识别一系列Outlook家族的数据存储文件(MS Outlook Express,MS Office Outlook 2003,2007,2010等),这是否可取?像application/dbx这种可以比较的小文本标识符就是我所需要的。

+0

由于它们都是二进制文件,所以它们都返回'application/octet-stream`,并且它没有被指示做其他事情。没有什么能够阻止你将它添加到系统的`magic.mime`中(除了没有为dbx/pst文件类型设置实际的MIME类型) – Hasturkun 2011-02-02 09:47:50

回答

3

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

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

如果您想要执行DOS文件类型检测的等效操作,请将扩展名从文件名(最后一段时间后的所有内容)剥离并在您自己的表中查找该字符串,并在其中定义所需的类型。

+0

感谢您的回答。请检查我的更新。 – 2011-02-02 07:28:28