Puis-je utiliser file
et magic
( http://linux.die.net/man/5/magic ) pour remplacer la description de certains autres formats connus?
par exemple, je voudrais décrire les formats suivants:
- LIT: http://genome.ucsc.edu/FAQ/FAQformat.html#format1
- Fasta: http://en.wikipedia.org/wiki/FASTA_format
- ...
qui ne sont que des fichiers texte
Ou
c'est "juste" un fichier gzippé commençant par le nombre magique BAM\1
?
connaissez-vous un exemple?
Est-il possible de fournir un code C personnalisé pour tester le fichier au lieu d'utiliser le format magique?
file-format
file-command
Pierre
la source
la source
Réponses:
Vous pouvez utiliser l'
-m
option pour spécifier une autre liste de fichiers magiques, et si vous incluez le vôtre avant le fichier magique compilé (/usr/share/file/magic.mgc
sur mon système) dans cette liste, ces modèles seront testés avant ceux "globaux". Vous pouvez créer une fonction, ou un alias, pour utiliser de manière transparente et transparente cette option en émettant simplement lafile
commande.Le langage utilisé dans le fichier magique est assez puissant, il est donc rarement nécessaire de revenir au codage C personnalisé. La seule fois où je me suis senti enclin à le faire, c'était dans les années 90, lorsque la correspondance de fichiers HTML et XML était difficile, car il n'y avait aucun moyen (à l'époque) d'avoir le boîtier flexible et la correspondance de décalage nécessaires pour pouvoir analyser
<HTML
et< Html
et< html
avec un modèle . J'ai implémenté cela en C comme modificateur du modèle 'string', permettant l'ignorance de la casse et le compactage des blancs (facultatifs) .Ces changements en C ont également nécessité une adaptation des fichiers magiques . Et à moins que le
file
code source n'ait considérablement changé depuis lors, vous devrez toujours modifier (ou fournir des règles supplémentaires) dans lesmagic
fichiers qui correspondent à ces changements de code C. Donc, vous pourriez tout aussi bien commencer à essayer de le faire avec des modifications uniquement dans les fichiers magiques, et revenir à changer le code C si cela ne fonctionne vraiment pas.la source
Pour le prochain utilisateur $ (user_searchengine) trouver ceci:
Des règles simples comme celle de BAM ressemblent à ceci:
OFFSET TYPE [OPERAND]FLAG MESSAGE
Dans le cas de BAM:
0 string BAM\1 BAM
Cela afficherait la chaîne BAM lors de la recherche de l'en-tête.
Pour plus d'informations, ces informations sur les sites IBM semblent un peu obsolètes, mais devraient néanmoins suffire pour les cas d'utilisation simples. l'homme a également un tas d'informations sur le format.
la source
Vous n'avez pas besoin de toujours utiliser l'
-m
option; comme documentend dans sa page de manuelfile(1)
lira également par défaut le~/.magic
fichier (ou une version compilée de celui-ci~/.magic.mgc
:), vous pouvez donc y ajouter vos définitions; pas besoin de jouer avec l'ensemble du système/usr/share/magic*
ou/etc/magic
.la source