¿Puedo usar file
y magic
( http://linux.die.net/man/5/magic ) para anular la descripción de algunos otros formatos conocidos?
por ejemplo, me gustaría describir los siguientes formatos:
- BED: http://genome.ucsc.edu/FAQ/FAQformat.html#format1
- Fasta: http://en.wikipedia.org/wiki/FASTA_format
- ...
que son 'solo' archivos de texto
O
eso es 'solo' un archivo comprimido que comienza con el número mágico BAM\1
?
¿Conoces algún ejemplo?
¿Es posible proporcionar un código C personalizado para probar el archivo en lugar de usar el formato mágico?
file-format
file-command
Pierre
fuente
fuente
Respuestas:
Puede usar la
-m
opción para especificar una lista alternativa de archivos mágicos, y si incluye el suyo antes del archivo mágico compilado (/usr/share/file/magic.mgc
en mi sistema) en esa lista, esos patrones se probarán antes que los "globales". Puede crear una función, o un alias, para usar esa opción de forma transparente siempre de forma transparente simplemente emitiendo elfile
comando.El lenguaje utilizado en el archivo mágico es bastante poderoso, por lo que rara vez es necesario volver a la codificación C personalizada. La única vez que me sentí inclinado a hacerlo fue en los 90 es cuando coincidan los archivos HTML y XML era difícil porque no había manera (en ese momento) para tener la carcasa flexible y de desplazamiento de adaptación necesaria para ser capaz de analizar
<HTML
y< Html
y< html
con un patrón . Implementé eso en C como modificador del patrón 'string', permitiendo ignorar mayúsculas y minúsculas y compactar espacios en blanco (opcionales) .Estos cambios en C también requirieron la adaptación de los archivos mágicos . Y a menos que el
file
código fuente haya cambiado significativamente desde entonces, siempre tendrá que modificar (o proporcionar reglas adicionales) en losmagic
archivos que coincidan con esos cambios en el código C. Por lo tanto, podría comenzar intentando hacerlo solo con cambios en los archivos mágicos y volver a cambiar el código C si eso realmente no funciona.fuente
Para el siguiente usuario $ (user_searchengine) que encuentre esto:
Las reglas simples como BAM se ven así:
OFFSET TYPE [OPERAND]FLAG MESSAGE
En el caso de BAM:
0 string BAM\1 BAM
Esto imprimiría la cadena BAM al encontrar el encabezado.
Para obtener más información, esta información de sitios de IBM parece estar un poco desactualizada, pero aún así debería ser suficiente para casos de uso simples. El hombre también tiene mucha información sobre el formato.
fuente
No necesita usar siempre la
-m
opción; como documento y en su página de manualfile(1)
también leerá por defecto el~/.magic
archivo (o una versión compilada del mismo~/.magic.mgc
), para que pueda agregar sus definiciones allí; no hay necesidad de meterse con todo el sistema/usr/share/magic*
o/etc/magic
.fuente