Actualmente estoy usando el siguiente comando:
file image.jpg | cut -d " " -f 2
Hasta ahora, todo bien. También funciona en un archivo sin extensión de imagen. Entonces, me preguntaba si hay otra manera de hacer esto. Es posible que no haya visto un caso determinado en el que el código anterior fallara.
Editar: estoy intentando crear una secuencia de comandos para cambiar el nombre de los archivos de imagen en un directorio de forma secuencial.
Respuesta1
El proyecto ImageMagick tiene facilidades para identificar imágenes.
Estoy usando ImageMagick todo el tiempo, incluida su función "identificar" desde la línea de comando y nunca falló al identificar una imagen.
Tenga en cuenta que proporciona mucho más que sólo el formato, por ejemplo:
$ identify tmp3.jpg
tmp3.jpg JPEG 1680x1050 1680x1050+0+0 DirectClass 8-bit 293.582kb
$ identify tmp.png
tmp.png PNG 1012x900 1012x900+0+0 DirectClass 8-bit 475.119kb
Respuesta2
El uso file
es un método confiable para identificar tipos de archivos. No se basa en extensiones de archivos, sino en "números mágicos"; el comienzo del contenido del archivo.
Para que su proceso sea más robusto, puede utilizarlo libmagic
directamente. De esa manera, si por alguna razón el formato de file
salida de 'cambia, no le afectará. Sin embargo, eso significa que necesitarías escribir tu script en un lenguaje que pueda llamar funciones en una biblioteca C.
Respuesta3
Ya tienes el comando correcto, ya que todo lo que hace es evaluar el tipo MIME a través del archivo libmagic
. Su único objetivo es reconocertipos de archivoconpatronesdado por el respectivoformato de archivo. Entonces no encontrarás nada mejor. Incluso puedes agregar extensiones propias para archivos, que no se reconocen correctamente. (a la magia, no al archivo de comando)