![“file”命令:指定 /etc/magic 文件中“search”选项的搜索深度?](https://linux22.com/image/195650/%E2%80%9Cfile%E2%80%9D%E5%91%BD%E4%BB%A4%EF%BC%9A%E6%8C%87%E5%AE%9A%20%2Fetc%2Fmagic%20%E6%96%87%E4%BB%B6%E4%B8%AD%E2%80%9Csearch%E2%80%9D%E9%80%89%E9%A1%B9%E7%9A%84%E6%90%9C%E7%B4%A2%E6%B7%B1%E5%BA%A6%EF%BC%9F.png)
我如何指定'的距离/深度文件' 命令应在文件中搜索以找到“搜索“ 定义 ?
我正在尝试创建一个通用规范“/etc/魔法“对于多种口味序言,这样我就可以对导入的谓词库进行大规模转换,以重新定位到我的个人项目环境。
审查了一些“目标”文件后,我相信我需要在前 3K 个字符内搜索一个文件,将此视为一种相当成功的方法。
到目前为止,我已经尝试过这两种口味/定义,但没有成功:
[1] 0 search/3072 [Pp][Rr][Oo][Ll][Oo][Gg] Prolog Predicate File (ISO-Compliant Prolog), ASCII text
和
[2] 0 search [Pp][Rr][Oo][Ll][Oo][Gg] Prolog Predicate File (ISO-Compliant Prolog), ASCII text
第二个成功,但前提是在文件的第一行中找到该模式。
另外,我尝试了以下定义:
[3] 0 search :- Prolog Predicate File (Non-Specific :-)
和
[4] 0 string % Prolog Predicate File (Non-Specific %), ASCII text
但是,当我在第 [2] 行条目下方输入 [3] 或 [4] 中的任何一个时,这些似乎会覆盖 [2] 的有效性。另外,出于某种原因,无论文件中的优先顺序如何,[3] 似乎“克服”了任何在我看来应该与 [4] 匹配的实例。
这引出了我的问题:如何告诉“file”命令在我的魔术文件中遇到的第一个匹配项退出并报告该情况?
我还定义了这组初始的其他规范,以标准化将被处理以符合要求的文件:
0 string %%Prolog Prolog Predicate File (Non-Specific)
0 string %%gprolog Prolog Predicate File (GNU Prolog)
0 string %%swipl Prolog Predicate File (SWI-Prolog)
0 string %%yap Prolog Predicate File (YAP Prolog)
0 string %%eclipse Prolog Predicate File (ECLiPSe)
0 string %%bprolog Prolog Predicate File (B-Prolog)
0 string %%poplog Prolog Predicate File (Poplog)
0 string %%lpaprolog Prolog Predicate File (LPA Prolog)
0 string %%isoprolog Prolog Predicate File (ISO-Compliant Prolog)
我创建了最后一个定义,以便我可以专门标记那些我已确认符合 ISO Prolog 规范的谓词文件。
我愿意不是想要使用“shebang”(即#!/bin/gprolog)符号来自动检测执行的第一行。
[额外的]我刚刚发现了一个陷阱。如何配置安装以确保在自定义 /etc/magic 条目之前评估任何标准/内置“shebang”表示法,但同时在任何其他魔法序列之前评估我的 /etc/magic 定义?
关于搜索深度规范的指导将不胜感激。