Linux 如何编写与文件结尾匹配的魔法文件测试模式?

Linux 如何编写与文件结尾匹配的魔法文件测试模式?,linux,file,design-patterns,classification,libmagic,Linux,File,Design Patterns,Classification,Libmagic,我开始怀疑这是否有可能,因为在谷歌、必应和linuxquestions.org上的多个搜索都没有发现任何结果 我感兴趣的是扩展/usr/share/magic(由文件(1)实用程序使用)中的magic模式,以便根据文件结尾处或附近的数据识别文件。我已经能够在文件的开头执行此操作,以及在文件开头执行任意偏移 手册页很好地说明了一些标准用例;不幸的是,似乎没有一种方法可以从末尾索引,而不是从开头索引。我能想到的唯一解决办法是采用脚本化方法,使用tac和/或lreverse,但我觉得这些方法可能对二进

我开始怀疑这是否有可能,因为在谷歌、必应和linuxquestions.org上的多个搜索都没有发现任何结果

我感兴趣的是扩展
/usr/share/magic
(由
文件(1)
实用程序使用)中的magic模式,以便根据文件结尾处或附近的数据识别文件。我已经能够在文件的开头执行此操作,以及在文件开头执行任意偏移

手册页很好地说明了一些标准用例;不幸的是,似乎没有一种方法可以从末尾索引,而不是从开头索引。我能想到的唯一解决办法是采用脚本化方法,使用
tac
和/或
lreverse
,但我觉得这些方法可能对二进制数据不友好


此外,我希望避免任何其他脚本化处理——我觉得这应该是正确的文件魔法可以做到的。有什么想法吗?

不可能<代码>文件(1)也适用于管道。您不能在管道上使用
lseek(2)
到达文件的末尾。读取整个文件直到文件结尾会非常慢(而且
file(1)
会努力加快速度),如果它实际上是从管道中读取,它可能永远不会遇到文件结尾,这会更糟

至于文档,对于开源软件,源代码本身就是最终的文档。如果你遇到这样的情况,最好去看看。
src/magic.c
中的函数
file\u或\u fd()
给出了线索。使用来源,卢克!;-)


在您的具体案例中,我将再次查看所讨论的文件格式,如果它确实不能被
file(1)
解析,那么一个简短的Perl或Python脚本就可以了。祝你好运

麦克,谢谢你的解释。我不知道为什么,但我从未想过要看源代码。这也许是我能得到的最好的提示!再次感谢,-阿杰