Использование команды linux 'file' для определения типа (например, изображения, аудио или видео) - PullRequest
10 голосов
/ 12 ноября 2011

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

file -ib deliverance.avi | grep video

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

Ответы [ 3 ]

10 голосов
/ 12 ноября 2011

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

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

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

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

1 голос
/ 12 ноября 2011

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

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

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

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

1 голос
/ 12 ноября 2011
Файл

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

...