How can I specify how far/deep the ‘file‘ command should search in a file to locate a match on a “search” definition ?
I am trying to create a universal specification in “/etc/magic” for multi-flavoured Prolog, so that I could do mass-transformation of imported predicate libraries for re-targeting to my personal environment for a project.
Having reviewed a number of the “target” files, I believe I would need to search within the first 3K characters of a file for this to be deemed reasonably successful as an approach.
So far I’ve tried these 2 flavours/definition, with no success:
(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
This second one is successful but only if the pattern is found in the first line of the file.
Also, I tried the following definitions:
(3) 0 search :- Prolog Predicate File (Non-Specific :-)
(4) 0 string % Prolog Predicate File (Non-Specific %), ASCII text
However, when I enter either of (3) or (4), below the entry for line (2), these seem to override the effectiveness of (2). Also, for some reason, regardless of order of precedence in the file, (3) seems to “overcome” any instance that, in my view should match up with (4).
This leads me to the question: How to tell the “file” command to exit on the first match encountered in my magic file and report that?
I have also defined this initial set of other specifications to normalize the files which will be massaged to conform:
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)
I have created this last definition so that I may specifically tag those predicate files which I have confirmed as compliant with ISO Prolog specifications.
I do NOT want to use the “shebang” (i.e. #!/bin/gprolog) notation for first line auto-detection for execution.
(Additional) I just discovered a gotcha. How can I configure the installation to ensure any standard/builtin “shebang” notation is evaluated before my customized /etc/magic entries, but at the same time have my /etc/magic definitions be evaluated before any other magic sequences?
Guidance on search depth specification would be greatly appreciated.