Перенаправление вывода информационной команды

Краткий ответ:
curl -Ls https://git.io/fj9xx > ole2compounddocs
file -m ole2compounddocs -e cdf -b --mime-type file.pub

application/vnd.ms-publisher

Длинный ответ:

Сначала (для потомков, некоторая предыстория):

Утилита file(, то есть реализация, используемая сегодня в большинстве систем ), представляет собой команду Яна Дарвина "Fine Free File Command" (В некоторых менеджерах пакетов она называется file; в других она называется libmagic. Команда fileявляется оболочкой утилиты CLI libmagic. По сути, это одно и то же.

Сама библиотека libmagicобычно опирается на «базу данных» (сжатый составной список, обычно называемый «magic.mgc», установленный в разных местах в зависимости от ОС )«магических» файлов, содержащих регулярное выражение. и другие шаблоны, которые библиотека может использовать, определяя «тип» неизвестных файлов (или потоков данных )из образцов необработанных двоичных файлов.

Тип файла определяется по списку различных критериев, основанных на внутренних правилах, имени/расширении (файла, если таковое имеется ), «основном» сжатом магическом файле и любых магических файлах, добавленных по команде строка с флагом -m.

Инструмент должен найти баланс между «типом» файла и содержащейся в нем информацией. Во многих случаях расширение файла не имеет большого значения, но в некоторых; Возьмем, к примеру, классический случай файла.zip и файла.jar. Оба являются «zip-файлами», т. е. представляют собой файлы, сжатые с помощью спецификации Info -Zip. В этом случае расширения файла должно быть достаточно, чтобы понять, что это исполняемый файл Java, а не просто zip-архив. Однако с расширением «.pub» Microsoft Publisher это не имеет большого значения, поскольку наиболее распространенное использование «.pub» на платформах *nix — это открытые ключи SSH.

Еще больше усложняет ситуацию тот факт, что Microsoft использует несколько различных версий своих форматов «Связывание и внедрение объектов (OLE )» в своих архивах «Compound Document File» для несметного числа очень разные приложения.Сами по себе они обычно представляют собой заархивированные XML-файлы. Все это приводит к довольно сложной (и дорогостоящей в вычислительном отношении )логике для детализации нескольких двоичных форматов/форматов сжатия, чтобы можно было отличить документ «Издатель» от, скажем, базы данных Microsoft Outlook.

Наконец, важно отметить, что типы MIME (технически, медиа-типы IANA)общеизвестно являются ненадежными маркерами «расположения контента» именно по указанным выше причинам, а также потому, что многие разработчики не утруждают себя зарегистрируйте свои типы «поставщика»(vdn.xxxxxxx):, хотя Microsoft зарегистрировала множество типов носителей,application/vnd.ms-office(которые fileиспользует для файлов CDF/CDF2 ), не зарегистрированы, как и application/ms-publisher. На самом деле файл mime.typesникогда не проверяется libmagic, и его существование не является стандартным на большинстве платформ. Вместо этого типы MIME просто жестко закодированы в «магических» файлах, а application/vnd.ms-publisherбыл добавлен совсем недавно.

Также важно отметить, что функциональность флага -iчасто сильно отличается от ожидаемого, и он работает по-разному в разных версиях fileили может вообще не существовать. Однако, в целом, его целью является машиночитаемость и (что важно ), в некоторых версиях он изменяет эвристику в пользу более релевантных для машины -результатов. Таким образом, в некоторых версиях fileи его базы данных вы получите результат от file -bi, который представляет собой просто :application/octet-stream; charset=binary(, который является допустимым, не -MIME-типом поставщика )вместо application/vnd.ms-office. И если он возвращаетapplication/vnd.ms-office(CDF ), он требует, чтобы флаги -e cdfэффективно «пропускали» этот результат, потому что (предположительно )больше подходит для другой программы/алгоритма, который может читать файлы CDF. чем тот факт, что это файл Publisher.Игнорирование результата CDF для продолжения поиска и получения любых идентификаторов ODF2 и их MIME-типов требует значительно больших вычислительных ресурсов — результат application/vnd.ms-officeтребует шести операций магического теста, а application/vnd.ms-publisherтребует сотен или тысяч (, как вы можете видеть. это с флагом -d). Еще одна причина, по которой лучше избегать-i:в большинстве новых версий file, этот флаг возвращает кодировку MIME, а также тип MIME, поэтому лучше использовать --mime-type, если вы не хотите, чтобы результат был application/vnd.ms-publisher; charset=binary. ].

В заключение, чтобы получить желаемые результаты, я рекомендую:

  1. Перекомпилируйте новую версию fileиз исходного кода -edge и
  2. Используйте флаги:file -b -e cdf --mime-typeвместо file -bi.
3
17.08.2021, 17:57
0 ответов

Теги

Похожие вопросы