7

我开始怀疑这是否可能,因为在 SO、Google、Bing 和 linuxquestions.org 上的多次搜索都一无所获。

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

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

另外,我想避免任何其他脚本处理——我觉得这应该可以通过正确的文件魔法来实现。有任何想法吗?

4

1 回答 1

5

这是不可能的。file(1)也被设计为与管道一起使用。您不能使用lseek(2)管道到达文件末尾。将整个文件读取到最后会非常慢(并且会file(1)努力提高速度),如果它实际上是从管道读取,它可能永远不会遇到文件结尾,这会更糟。

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

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

于 2011-03-22T05:52:15.230 回答