是否可以在啟動服務資料庫中查詢將開啟任意檔案或 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

安德魯‧莫滕森杜蒂是一個將列出 UTI 處理程序的 CLI:

  • -d <uti>列出預設處理程序;
  • -l <uti>列出所有已註冊的處理程序。

請參閱duti 的手冊頁

編輯:正如 Lri 指出的這個答案,duti似乎沒有列出所有可能的應用(可能是因為它沒有考慮UTI繼承?這將是進一步詢問的問題)。他的解決方案,所有應用(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'

相關內容