我可以使用file
和magic
(http://linux.die.net/man/5/magic)来覆盖一些其他已知格式的描述?
例如,我想描述以下格式:
- 床:http://genome.ucsc.edu/FAQ/FAQformat.html#format1
- 法斯塔: http://en.wikipedia.org/wiki/FASTA_format
- ...
那只是文本文件
或者
这“只是”一个以幻数开头的 gzip 压缩文件BAM\1
?
你知道什么例子吗?
是否可以提供自定义 C 代码来测试文件而不是使用魔术格式?
答案1
您可以使用该-m
选项指定魔术文件的备用列表,如果您/usr/share/file/magic.mgc
在该列表中的已编译魔术文件(在我的系统上)之前包含您自己的魔术文件,则这些模式将在“全局”模式之前进行测试。您可以创建一个函数或别名,以便始终通过发出命令来透明地使用该选项file
。
magic 文件中使用的语言非常强大,因此很少需要恢复到自定义 C 编码。我唯一一次愿意这样做是在 90 年代,当时匹配 HTML 和 XML 文件很困难,因为(当时)没有办法拥有灵活的大小写和偏移量匹配,以便能够使用一种模式解析<HTML
and< Html
和。 < html
。我在 C 中实现了它作为“字符串”模式的修饰符,允许忽略大小写并压缩(可选)空白。
需要对 C 进行这些更改以及魔法文件的改编。除非file
此后源代码发生了重大更改,否则您始终需要在magic
文件中修改(或提供额外的)规则来匹配这些 C 代码更改。因此,您不妨开始尝试仅更改 magic 文件来实现此目的,如果确实不起作用,则重新更改 C 代码。
答案2
答案3
您不需要总是使用该-m
选项;因为其手册页中的 documentendfile(1)
默认情况下也会读取该~/.magic
文件(或其编译版本:)~/.magic.mgc
,因此您可以在那里添加定义;无需搞乱系统范围/usr/share/magic*
或/etc/magic
.