【问题标题】:How do you write a magic file test pattern to match the end of a file?你如何编写一个魔术文件测试模式来匹配文件的结尾?
【发布时间】:2011-06-25 00:51:56
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: linux file design-patterns classification libmagic


    【解决方案1】:

    这是不可能的。 file(1) 也设计用于管道。您不能在管道上使用lseek(2) 来到达文件末尾。将整个文件读取到最后会很慢(file(1) 会努力加快速度),如果它实际上是从管道读取,它可能永远不会遇到文件末尾,这会更糟。

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

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

    【讨论】:

    • Mack,感谢您提供简洁明了的解释。我不知道为什么,但我从来没有想过查看源代码。这也许是我能收到的最好的提示!再次感谢,-Arj
    猜你喜欢
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    相关资源
    最近更新 更多