
Я могу использовать 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'