10

Я могу использовать MDL для показа универсального идентификатора типа (UTI) для произвольного файла, а также иерархии типов, которые являются надмножествами конкретного UTI.

mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.ksh
kMDItemContentType     = "public.ksh-script"
kMDItemContentTypeTree = (
    "public.ksh-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.command
kMDItemContentType     = "com.apple.terminal.shell-script"
kMDItemContentTypeTree = (
    "com.apple.terminal.shell-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)

Существуют ли какие-либо инструменты, которые могут показать, какие приложения зарегистрированы для определенного UTI, кроме проб и ошибок?

Из проверки ясно, что файл foo.command будет открыт Terminal.app, но совсем не ясно, что foo.ksh в настоящее время принадлежит TextEdit.app.

Я хотел бы иметь возможность читать базу данных Mac OS X Launch Services напрямую, фактически не прибегая к использованию open чтобы увидеть, какое приложение выбрано для каждого UTI. Это было бы подобно открытию переключателей --preview --verbose чтобы сказать мне, что будет делать, а не делать это.

Еще лучше было бы перечислить все приложения, которые могут открывать этот UTI, даже если они не являются предпочтительным приложением.

Чтобы получить эту вторичную информацию, мне нужно создать или найти файл для каждого типа интересов и использовать Finder, чтобы вручную показать, какие приложения могут открывать этот UTI.

Я действительно хотел бы иметь возможность получить доступ к этим данным программно из терминала.

2 ответа2

10

Вы можете использовать эту команду для проверки базы данных служб запуска. Опция -dump дает вам всю базу данных, затем вы можете направить ее в grep и искать то, что вам нравится.

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -n7 'your search string'

6

Дуэт Эндрю Мортенсена - это CLI, в котором будут перечислены обработчики UTI:

  • -d <uti> перечисляет обработчик по умолчанию;
  • -l <uti> перечисляет все зарегистрированные обработчики.

Смотрите man-страницу для duti.

РЕДАКТИРОВАТЬ: как Lri указывает в этом ответе, duti, кажется, не перечисляет все возможные приложения (возможно, потому что он не учитывает наследование UTI? Это было бы вопросом для дальнейшего расследования). Его рекомендуемое решение, AllApllications, очевидно, будет лучшим ответом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .