Использование команды "файл" linux для определения типа (т. е. изображение, аудио или видео)

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

file -ib deliverance.avi | grep video

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

3 ответов


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

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

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

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


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


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

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

посмотреть: http://linux.about.com/library/cmd/blcmdl1_file.htm

надеюсь, что это помогает!