2011-02-10 13 views
7

Estoy empezando a preguntarme si esto es posible ya que las búsquedas múltiples en SO, Google, Bing y linuxquestions.org no han aparecido.¿Cómo se escribe un patrón de prueba de archivo mágico para que coincida con el final de un archivo?

Estoy interesado en extender los patrones mágicos ubicados en /usr/share/magic (utilizado por la utilidad file(1)) para reconocer archivos basados ​​en datos en o cerca del final del archivo. Pude hacer esto desde el principio para el comienzo de un archivo, así como para las compensaciones arbitrarias en el archivo.

La página de manual hace un buen trabajo al ilustrar algunos casos de uso estándar; desafortunadamente, no parece que haya una forma de indexar desde el final en lugar de desde el principio. La única solución alternativa que se me ocurrió fue adoptar un enfoque con guiones usando tac y/o lreverse, pero creo que estos pueden ser hostiles a los datos binarios.

Además, quería evitar cualquier otro proceso con guiones, siento que esto debería ser factible con la magia de archivo correcta. ¿Algunas ideas?

Respuesta

5

No es posible. file(1) está diseñado para trabajar con tuberías también. No puede usar lseek(2) en tuberías para llegar al final del archivo. Leer todo el archivo hasta el final sería muy lento (y file(1) intenta ser rápido) y si realmente está leyendo desde un conducto, puede que nunca encuentre el final del archivo, lo que sería aún peor.

En cuanto a la documentación, en el caso del software de código abierto, el código fuente en sí es la última documentación. Si te quedas atascado en un caso como este, siempre es una buena idea echar un vistazo. La función file_or_fd() en src/magic.c da la clave. Usa la Fuente, Luke! ;-)

En su caso específico, me gustaría echarle un segundo vistazo al formato de archivo en cuestión, y si realmente no puede ser analizado por file(1), entonces una breve secuencia de comandos de Perl o Python debería hacer el truco. ¡Buena suerte!

+0

Mack, gracias por esta explicación clara y concisa. No sé por qué, pero nunca se me ocurrió mirar el código fuente. ¡Ese es quizás el mejor consejo que podría haber recibido! Gracias de nuevo, -Arj – jayce

+0

@Ari: ¡de nada! –

Cuestiones relacionadas