Используя команду linux 'file' для определения типа (то есть изображения, аудио или видео)

Слово file здесь относится к командной оболочке file, а не к фактическим файлам. Я хочу определить, является ли файл, например, видеофайлом (.mpg, .mkv, .avi). file довольно хорош при возврате image для файлов изображений, video для видеофайлов и audio для аудиофайлов (и application/x-empty по какой-либо причине для текста). Мой вопрос заключается в том, насколько достоверно это относится к идентификации типов. Если бы я сделал простой

file -ib deliverance.avi | grep video

будет работать для всех основных видеофайлов, обозначенных здесь?

Ответ 1

Результаты file менее совершенны, и у него больше проблем с некоторыми типами файлов, чем у других. Файл в основном просто ищет отдельные части двоичных данных в предсказуемых шаблонах для определения типов файлов.

К сожалению, в частности, некоторые типы файлов, которые часто используются для видео, попадают в эту "проблемную" категорию. Новые форматы контейнеров, такие как .mp4 и .mkv, обычно имеют несколько разных типов MIME, которые должны должным образом зависеть от того, какой тип данных содержится. Например, .mp4 может быть правильно идентифицирован как video/mp4, audio/mp4 или application/mp4 в зависимости от содержимого.

На практике file часто делает догадки, которые просто соответствуют общему использованию, и это может отлично сработать для вас. Например, в то время как я упомянул некоторые теоретические трудности с определением файлов Matroska правильно, file в основном предполагает, что любой файл Matroska является видео. С другой стороны, использование контейнера Ogg более равномерно распределено между аудио и видео, и я считаю, что текущая версия file просто разделяет разницу и идентифицирует файлы Ogg как application/ogg, которые не попадают в любой из ваших категорий.

Единственное, что я могу с уверенностью сказать, это то, что вы хотите получить самую последнюю версию file, которую вы можете получить. "Магические" файлы, содержащие шаблоны для соответствия и типы MIME, которые будут возникать в результате соответствия, обновляются довольно часто, чтобы включать более новые типы файлов, такие как WebM, или просто для повышения точности для более старых типов.

Ответ 2

работает, ссылаясь на заголовок файла на файл "magic number". Я подозреваю, что лучший способ увидеть, как надежный файл проверяет ваш локальный файл магического номера (возможно/usr/share/magic, но см. Man файл для подробностей) для типов файлов из списка ссылок.

Ответ 3

Кажется, он должен работать для большинства видео/аудио/файлов изображений. Но если это не так, на самом деле есть файл, который содержит отношения между расширением и типом:

Информация, идентифицирующая эти файлы, считывается из скомпилированного магического файла /usr/share/magic.mgc или/usr/share/magic, если файл компиляции не существует.

см: http://linux.about.com/library/cmd/blcmdl1_file.htm

Надеюсь, это поможет!