Как связать новый (пользовательский) MIME-тип с файлами (на основе расширения файла)?

В то время как нумерация catне соответствует POSIX, nlсоответствует, и POSIX также определяет стили нумерации, которые nlиспользует:

−b type  Specify which logical page  body  lines  shall  be  numbered.
         Recognized types and their meaning are:

         a       Number all lines.

         t       Number only non-empty lines.

         n       No line numbering.

         pstring Number  only  lines  that  contain  the basic regular
                 expression specified in string.

         The default type for logical page body shall be t (text lines
         numbered).

Итак, несмотря на то, что это значение по умолчанию:

nl -bt filename
3
02.02.2020, 07:49
1 ответ

Хранилищеshared-mime-infoуже указывает MIME-тип application/pgp-keys. Посмотреть можно здесь:

<mime-type type="application/pgp-keys">
  <comment>PGP keys</comment>
  <acronym>PGP</acronym>
  <expanded-acronym>Pretty Good Privacy</expanded-acronym>
  <sub-class-of type="text/plain"/>
  <generic-icon name="text-x-generic"/>
  <magic priority="50">
    <match type="string" value="-----BEGIN PGP PUBLIC KEY BLOCK-----" offset="0"/>
    <match type="string" value="-----BEGIN PGP PRIVATE KEY BLOCK-----" offset="0"/>
    <match type="big16" value="0x9501" offset="0"/>
    <match type="big16" value="0x9500" offset="0"/>
    <match type="big16" value="0x9900" offset="0"/>
    <match type="big16" value="0x9901" offset="0"/>
  </magic>
  <glob pattern="*.skr"/>
  <glob pattern="*.pkr"/>
  <glob pattern="*.asc" weight="10"/>
  <glob pattern="*.pgp"/>
  <glob pattern="*.gpg"/>
  <glob pattern="*.key"/>
</mime-type>

https://gitlab.freedesktop.org/xdg/shared-mime-info/-/blob/6bf9e4ff0fb7eff11a02bd937045bf5dc291841a/data/freedesktop.org.xml.in#L282

или здесь на своей машине:

/usr/share/mime/packages/freedesktop.org.xml

Однако шаблон глобуса *.pubне используется, вероятно, чтобы избежать конфликтов с форматом MS Publisher. Один обходной путь - просто переименовать файлы, например. *.ascфайлы. Но продолжим, предполагая, что переименование файлов не вариант. Вот файл mimeinfo, который нам нужен (обратите внимание, что он должен называтьсяpgp-keys.xml):

$ cat pgp-keys.xml
<?xml version="1.0"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
    <mime-type type="application/pgp-keys">
        <comment>PGP keys</comment>
        <acronym>PGP</acronym>
        <expanded-acronym>Pretty Good Privacy</expanded-acronym>
        <sub-class-of type="text/plain"/>
        <generic-icon name="text-x-generic"/>
        <magic priority="10">
          <match value="-----BEGIN PGP PUBLIC KEY BLOCK-----" type="string" offset="0"/>
        </magic>
        <glob weight="10" pattern="*.pub"/>
    </mime-type>
</mime-info>

Преимущество «волшебной» части заключается в том, что он будет искать эту строку в начале файла, затем определите MIME-тип в зависимости от того, совпадает он или нет. Это означает, что файлы с mimetype application/vnd.ms-publisherможет по-прежнему иметь расширение файла .pubи жить в относительной гармонии вместе с открытыми ключами, которые также имеют расширение файла .pub. Для этого мы должны установить файл mimeinfo.

Чтобы установить его для одного пользователя:

xdg-mime install --mode user pgp-keys.xml
update-mime-database ~/.local/share/mime

Для установки системного -широкого:

sudo xdg-mime install --mode system pgp-keys.xml
sudo /usr/bin/update-mime-database /usr/share/mime

Я проверил результат на примере открытого ключа отсюда:

https://www.intel.com/content/www/us/en/security-center/pgp-public-key.html

и пример файла MS Publisher отсюда:

https://github.com/apache/tika/blob/0bf11aec86079b8f1ae2f1ea680910ba79665c4f/tika-parsers/src/test/resources/test-documents/testPUBLISHER.pub

Вы можете попробовать это сами с репозиторием git здесь:

https://github.com/nbeaver/custom-pub-file-mimetype

1
28.04.2021, 23:24

Теги

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