Можно ли выполнить запрос к базе данных служб запуска для приложений, которые откроют произвольный файл или тип UTI?

Можно ли выполнить запрос к базе данных служб запуска для приложений, которые откроют произвольный файл или тип UTI?

Я могу использовать mdls, чтобы показатьЕдиный идентификатор типа(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Запуск услугбаза данных напрямую, не прибегая к использованию, openчтобы увидеть, какое приложение выбрано на основе UTI. Это было бы похоже на то, что --preview --verboseпереключатели должны быть открыты, чтобы сказать мне, что оно будет делать, а не делать это.

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

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

введите описание изображения здесь

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

решение1

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

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

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

EDIT: как указывает Лри вэтот ответ, duti, похоже, не перечисляет все возможные применения (возможно, потому, что не учитывает наследование ИМП? Это было бы предметом дальнейшего исследования). Его решение,ВсеПриложения(archive.org) даст более полный ответ.

решение2

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

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

Связанный контент