Почему разница между результатами с "file --mime-type" и "xdg-mime query filetype"?

Я пытаюсь найти MIME-тип файла. Я использовал 'file --mime-type' или 'xdg-mime', но получил разные ответы? Я не уверен, чтобы понять?

$ file --mime-type -b gePlugin.kmz 
  application/zip
$ xdg-mime query filetype gePlugin.kmz 
  application/vnd.google-earth.kmz

Почему у меня разные ответы? На кого мне положиться?

Почему есть разница?

Спасибо!


ОБНОВЛЕНИЕ (по cipricus):

Пример для файла iso:

file --mime-type -b MY_ISO.iso дает application/x-iso9660-image, что бесполезно с файлом рабочего стола для действий контекстного меню.

xdg-mime query filetype MY_ISO.iso дает model/x.stl-binary, который работает с тем же рабочим столом для действий контекстного меню.

4 ответа

Решение

@jdpipe кажется правильным относительно поведения xdg-mime а также file, Есть еще одна утилита mimetype который ведет себя аналогично xdg-mime,

Что касается того, какой утилите "доверять", обычно хорошо просто использовать mimetype или же xdg-mime , Однако, если вы обеспокоены тем, что файл может иметь неправильное расширение, используйте file потому что он проверяет содержимое файла, прежде чем сообщать о его типе. Например, если png переименован в jpg, file правильно сообщает "image/png", но xdg-mime а также mimetype оба неправильно сообщают "изображение / JPEG".

Как отмечает @ db429, похоже, что обе утилиты верны для kmz файл, который вы цитируете. Google Планета Земля создает kmz файлы, которые также переименованы zip файлы. То, что вы хотите сделать с информацией, определяет, какое приложение использовать. Если вы хотите извлечь содержимое, то file говорит вам идти вперед и использовать unzip, Если вы хотите просматривать и использовать информацию, как первоначально предполагалось, используйте Google Планета Земля или другую программу, способную использовать kmz файлы.

Учитывая iso файл, я не знаю почему xdg-mime говорит вам model/x.stl-binary, На моем компьютере это сообщает application/x-cd-image, Кроме того, используя file без --mime-type Флаг сообщает дополнительную информацию, которая подтверждает, что это какой-то тип образа диска. Возможно, было бы полезно обновить базу данных MIME:

sudo update-mime-database /usr/share/mime

xdg-mime утилита из xdg-utils это более комплексная программа, которая учитывает среду вашего рабочего стола (GNOME и родственников, или KDE). В некоторых случаях он звонит file утилита, но в других случаях она ищет базу данных mimetype для вашей конкретной системы.

file Утилита, насколько я могу судить, смотрит только внутри вашего файла, она не смотрит на имя файла. Следовательно .kmz файл, распознается как почтовый файл. file использует "магические числа", которые связаны с определенными типами файлов, например, волшебная строка P5 в начале файл связан с изображениями PGM из библиотеки Netpbm.

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

Если вы хотите узнать больше, xdg-mime Подробности здесь - исходный код. Вы можете видеть, что это вызывает file в некоторых случаях.

Насколько я могу тел в 18.04 (больше здесь):

xdg-mime query filetype YOURFILE

это тот, который надежен.

Если вам нужно, чтобы MIME-тип имел действие контекстного меню с каким-либо файловым менеджером, таким как Nautilus или Dolphin, посмотрите в этом файловом менеджере под "Свойствами" файла.

В дельфинах:

Короткий веб-поиск с google earth file format дал ответ xdg-mime имеет более точный ответ, но, скорее всего, 'z' обозначает формат файла 'zip', поэтому первое тоже верно.

Другие вопросы по тегам