В настоящее время я использую следующую команду:
file image.jpg | cut -d " " -f 2
Пока все хорошо. Это работает и с файлом без расширения изображения. Так что мне было интересно, есть ли другой способ сделать это? Я мог не увидеть определенного случая, когда код выше не сработает.
Редактировать: Я пытаюсь создать скрипт для последовательного переименования файлов изображений в каталоге.
решение1
Проект ImageMagick имеет возможности для идентификации изображений.
Я постоянно использую ImageMagick, в том числе его функцию «идентификации» из командной строки, и он ни разу не подвел при идентификации изображения.
Обратите внимание, что он дает гораздо больше, чем просто формат, например:
$ 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
решение2
Использование file
— надежный метод определения типов файлов. Он не полагается на расширения файлов, а скорее на «магические числа»; начало содержимого файла.
Чтобы сделать ваш процесс более надежным, вы можете использовать libmagic
напрямую. Таким образом, если по какой-то причине формат file
вывода изменится, это не повлияет на вас. Однако это означает, что вам нужно будет написать свой скрипт на языке, который может вызывать функции в библиотеке C.
решение3
Вы уже получили правильную команду, поскольку все, что она делает, это оценивает тип MIME через libmagic
. Ее единственная цель — распознатьтипы файловсузорыпредоставлено соответствующимформат файла. Так что ничего лучше вы не найдете. Вы даже можете добавлять собственные расширения для файлов, которые не распознаются правильно. (для magick, а не для командного файла)