你如何编写一个魔术文件测试模式来匹配文件的结尾?

时间:2011-02-10 17:28:21

标签: linux file design-patterns classification libmagic

我开始怀疑这是否可能,因为在SO,Google,Bing和linuxquestions.org上的多次搜索都没有发现。

我有兴趣扩展位于/usr/share/magic(由file(1)实用程序使用)的魔术模式,以根据文件末尾或附近的数据识别文件。我已经能够在文件的开头执行此操作,以及从一开始就对文件进行任意偏移。

该手册页非常适合说明一些标准用例;不幸的是,似乎没有一种方法可以从最终开始而不是从开头开始。我能提出的唯一解决方法是使用tac和/或lreverse采用脚本方法,但感觉这些可能对二进制数据不友好。

此外,我想避免任何其他脚本处理 - 我觉得这应该是正确的文件魔术可行。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

这是不可能的。 file(1)也适用于管道。您无法在管道上使用lseek(2)来到达文件末尾。读取整个文件直到结束将非常慢(并且file(1)尝试很难快速)并且如果它实际上是从管道中读取的,它可能永远不会遇到文件的结尾,这将更糟糕。

至于文档,在开源软件的情况下,源代码本身就是最终的文档。如果你遇到这样的情况,看看总是一个好主意。 file_or_fd()中的函数src/magic.c给出了线索​​。使用来源,卢克! ; - )

在你的具体情况下,我会再看看有问题的文件格式,如果它真的无法被file(1)解析,那么一个简短的Perl或Python脚本应该可以解决问题。祝你好运!