如何在 mime 类型文件中使用十六进制代码作为魔法值

如何在 mime 类型文件中使用十六进制代码作为魔法值

我知道要添加模仿类型我必须使用这样的代码:

<mime-type type="audio/x-gtp">
    <comment>GuitarPro file</comment>
    <glob pattern="*.gp5"/>
</mime-type>

我知道要添加模仿类型其文件扩展名用于其他模仿类型我可以用魔法像那样:

<mime-type type="audio/x-gtp">
    <magic priority="50">
        <match value="BCFZ" type="string" offset="0" />
    </magic>
    <glob pattern="*.gpx"/>
</mime-type>

考虑到文件的前 4 个字符是可打印的,我使用以下方法获得了此模式:xxd。我给你们看xxd输出:

xxd '/home/cactus/Descargas/Billie Eilish - Everything I Wanted.gpx'  | head -n 4 
00000000: 4243 465a 0420 0500 6848 68cd 4c00 0180  BCFZ. ..hHh.L...
00000010: 0000 4ed7 fdff feff ffff e76d 156a 52d8  ..N........m.jR.
00000020: 516e 142e 0141 7201 00e4 0201 c804 0390  Qn...Ar.........
00000030: 0807 2010 0e40 201c 8040 3900 8072 0100  .. ..@ [email protected]..

到目前为止,一切运行良好。

其他文件类型的问题.gp,其第一个字符不是不可侵犯的,我向您展示了前四个 xdd 行的输出:

xxd /home/cactus/Descargas/arpeggio.gp   | head -n 4                                                                                                                                                      
00000000: 504b 0304 1400 0000 0000 0000 0000 0000  PK..............
00000010: 0000 0000 0000 0000 0000 0800 0000 436f  ..............Co
00000020: 6e74 656e 742f 504b 0304 1400 0800 0800  ntent/PK........
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................

所以我不知道如何使用魔法对于这种类型的文件,我认为最好的方法是使用十六进制代码价值,但我不知道如何使用它。

谢谢你的时间。

答案1

我能够解决这个问题。

在该页面中https://specifications.freedesktop.org/shared-mime-info-spec/latest/ar01s02.html#idm45785599133248我找到了以下定义:

价值: 与文件内容进行比较的值,格式由 type 属性指定。字符串类型支持 C 字符转义(\0、\t、\n、\r、\xAB(十六进制)、\777(八进制)。

这表明了我所需要的,因此您可以使用 C 字符转义在字符串类型中使用十六进制值。

记住我的文件的十六进制输出:

hexdump -C /home/cactus/Descargas/arpeggio.gp  | head -4                                                                                                                                                                    
00000000  50 4b 03 04 14 00 00 00  00 00 00 00 00 00 00 00  |PK..............|
00000010  00 00 00 00 00 00 00 00  00 00 08 00 00 00 43 6f  |..............Co|
00000020  6e 74 65 6e 74 2f 50 4b  03 04 14 00 08 00 08 00  |ntent/PK........|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

模式看起来会像这样:\x40\x4b\x03\x04。这不起作用。但我改变了优先事项100最终成功了。最终代码如下:

<mime-type type="audio/x-gtp">
    <magic priority="100">
        <match value="\x50\x4b\x03\x04" type="string" offset="0"  />
    </magic>
    <comment>GuitarPro file</comment>
    <comment xml:lang="es">Archivo de GuitarPro</comment>
    <glob pattern="*.gp"/>
</mime-type>

最后终于成功了!

在此处输入图片描述

相关内容