如何编写满足多条件匹配逻辑的file工具自定义magic文件?
实现file工具自定义magic文件的多条件组合匹配
我完全懂你这种困惑——man magic里的语法确实有点绕,尤其是要实现这种「多位置多选项的AND逻辑」的时候。我来给你拆解一下怎么写出符合需求的自定义magic规则,直接上例子更直观。
核心规则思路
你的需求是:(字节0是A/B/C) AND (字节1-3是DEF/GHI/JKL),对应file magic的写法可以拆成两层:
- 先匹配字节0的OR条件,标记候选类型
- 仅当前面的候选条件满足时,再匹配字节1-3的OR条件,最终确认类型
具体的自定义magic代码
把下面的内容保存为my_custom.magic文件:
# 自定义文件类型:满足双条件组合的文件 0 string A My Custom Combined File 0 string B My Custom Combined File 0 string C My Custom Combined File >1 string DEF My Custom Combined File >1 string GHI My Custom Combined File >1 string JKL My Custom Combined File
规则解释
- 前3行:
0 string X表示检查偏移0字节的位置是否等于字符串X(A/B/C),如果匹配,就先把文件标记为候选类型My Custom Combined File。 - 后3行:
>1 string Y中的>符号是关键——它表示只有前面的条件已经匹配成功时,才会执行这个检查(偏移1字节的位置是否等于Y,即DEF/GHI/JKL)。 - 只有当某一行0位置的条件 + 某一行>1位置的条件同时满足时,file才会最终输出这个自定义类型。
测试方法
用以下命令测试你的目标文件:
file -m my_custom.magic your_test_file.bin
额外小技巧
- 如果需要忽略大小写匹配,可以在规则前加
i标记,比如:0 i string a My Custom Combined File - 如果要匹配字节而非字符串,把
string换成byte(单个字节)或beshort/lelong等(多字节数值类型)
我之前也踩过这个坑,一开始以为要写复杂的嵌套语法,后来发现用这种分层的规则就轻松实现了AND+OR的组合逻辑。
内容的提问来源于stack exchange,提问作者mivk
相关产品推荐
相关产品推荐

