任意のファイルまたは UTI タイプを開くアプリケーションの起動サービス データベースを照会することは可能ですか?

任意のファイルまたは UTI タイプを開くアプリケーションの起動サービス データベースを照会することは可能ですか?

mdlsを使用して表示することができます統一型識別子任意のファイルの UTI (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を読みたいのですが打ち上げサービス実際に使用せずにデータベースに直接アクセスし、openUTI ごとにどのアプリが選択されているかを確認します。これは、実行するのではなく、何を実行するかを伝えるためにスイッチを開くようなものです--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'

関連情報