Kann ich file
und magic
( http://linux.die.net/man/5/magic ) verwenden, um die Beschreibung einiger anderer bekannter Formate zu überschreiben?
Zum Beispiel möchte ich folgende Formate beschreiben:
- BETT: http://genome.ucsc.edu/FAQ/FAQformat.html#format1
- Fasta: http://en.wikipedia.org/wiki/FASTA_format
- ...
das sind 'nur' Textdateien
Oder
Das ist 'nur' eine komprimierte Datei, die mit der magischen Nummer beginnt BAM\1
?
Kennst du ein Beispiel?
Ist es möglich, einen benutzerdefinierten C-Code zum Testen der Datei bereitzustellen, anstatt das magische Format zu verwenden?
file-format
file-command
Pierre
quelle
quelle
Antworten:
Sie können die
-m
Option verwenden, um eine alternative Liste von Magiedateien anzugeben. Wenn Sie Ihre eigene vor der kompilierten Magiedatei (/usr/share/file/magic.mgc
auf meinem System) in diese Liste aufnehmen, werden diese Muster vor den "globalen" getestet. Sie können eine Funktion oder einen Alias erstellen, um diese Option transparent und immer transparent zu verwenden, indem Sie einfach denfile
Befehl ausgeben .Die in Magic File verwendete Sprache ist sehr leistungsfähig, sodass selten auf benutzerdefinierte C-Codierung zurückgegriffen werden muss. Das einzige Mal , dass ich geneigt fühlte , war, so in den 90er Jahren , als passende HTML und XML - Dateien schwierig war , weil es keine Möglichkeit gab (damals) die flexible Hülle zu haben und notwendige Offset Anpassung der Lage sein , zu analysieren
<HTML
und< Html
und< html
mit einem Muster . Ich habe das in C als Modifikator für das 'String'-Muster implementiert, was das Ignorieren von Groß- und Kleinschreibung und das Komprimieren von (optionalen) Leerzeichen ermöglicht .Diese Änderungen in C erforderten auch eine Anpassung der magischen Dateien . Und wenn sich der
file
Quellcode seitdem nicht wesentlich geändert hat, müssen Sie inmagic
Dateien, die diesen C-Code-Änderungen entsprechen , immer Regeln ändern (oder zusätzliche Regeln bereitstellen) . Sie können also genauso gut versuchen, dies nur mit Änderungen an den magischen Dateien zu tun, und auf die Änderung des C-Codes zurückgreifen, wenn dies wirklich nicht funktioniert.quelle
Für den nächsten $ (user_searchengine) Benutzer, der dies findet:
Einfache Regeln wie die BAM sehen folgendermaßen aus:
OFFSET TYPE [OPERAND]FLAG MESSAGE
Im Fall von BAM:
0 string BAM\1 BAM
Dies würde die Zeichenfolge BAM drucken, wenn der Header gefunden wird.
Für weitere Informationen scheinen diese IBM Site- Informationen etwas veraltet zu sein, sollten jedoch für einfache Anwendungsfälle ausreichen. Mann hat auch eine Reihe von Informationen über das Format.
quelle
Sie müssen die
-m
Option nicht immer verwenden . Da documentend in seiner Manpagefile(1)
auch standardmäßig die~/.magic
Datei (oder eine kompilierte Version davon :) liest~/.magic.mgc
, können Sie dort Ihre Definitionen hinzufügen. keine Notwendigkeit, mit dem systemweiten/usr/share/magic*
oder zu spielen/etc/magic
.quelle