今回は「Spotlight関連コマンド」について。Spotlightの導入に伴い、OS X 10.4(Tiger)のとき登場したコマンドだが、今回のMavericksにおける「タグ」のサポートにより用途が拡大した。Terminalからどのようにしてタグを活用するか、「mdls」や「mdfind」の用法を踏まえつつ解説してみよう。

「タグ」と「ラベル」はココがちがう

MavericksのFinderでは「タグ」がサポートされた。といっても、まったく新しい概念ではなく、Spotlight検索で参照されるメタデータの一種であり、従来のラベルと同じ要領でFinderのサイドバーやコンテキストメニューを使いかんたんに設定できる。

少々語弊があるが、タグとラベルの違いはわずかだ。Spotlightはファイルのメタデータをインデックス化し高速な検索を可能にする技術体系で、Finderやデスクトップはそれを表示/検索するためのUIに過ぎない。タグとラベルのいずれもメタデータであり、保管場所と情報量が多少異なるだけのことだ。

具体的にいうと、ラベルはメタデータの「kMDItemFSLabel」という項目に色の情報(ex. レッド=6、オレンジ=7)を持たせることで、どのラベルが設定されているかの判定を可能にする。一方のタグは「kMDItemUserTags」という項目に数値ではなく文字列を、複数持つことが可能だ。しかも任意の文字列をタグとして使用することもできる。

これだけの違いだが、実際ファイル管理に活用してみると差は大きい。ラベルでは「AかBか」の分類しかできなかったが、タグでは「AかつB」や「Aかつ(任意の)○○」といった分類ができる。複雑な分類が可能になってもウリの高速検索はそのままだ。

Mavericsでサポートされた「タグ」は、ラベルと同様メタデータとしてEA (Extended Attributes)に記録される

タグをTerminalから使う

前述したとおり、タグの情報はファイルメタデータに「kMDItemUserTags」という項目で記録される。試しに、既製タグの「オレンジ」と「ブルー」、オリジナルタグの「Important」という合計3つのタグを持つファイルの情報をmdlsコマンドで調べてみた。

実行結果からは、ASCII文字はそのままで「オレンジ」と「ブルー」はUnicodeの16進数表記(ex. \U30aa="オ"、\U30ec="レ"、\U30f3="ン"、\U30b7="シ"、\U3099="゛")ということがわかる。この実行結果からはうかがえないが、もちろん漢字も使用可能だ。

$ mdls -name kMDItemUserTags ファイル名

mdlsコマンドで「kMDItemUserTags」の内容を表示したところ。3つのタグが設定されていることがわかる

タグはmdfindコマンドで検索条件にも使用できる。用法は従来どおり、「kMDItemUserTags==タグ」とすればいい。「AかつB」を条件とする場合は、「kMDItemUserTags==タグ1 && kMDItemUserTags==タグ2」の要領だ。

$ mdfind 'kMDItemUserTags==タグ1 && kMDItemUserTags==タグ2'

mdfindコマンドを利用すれば、Terminalからタグで検索することもできる

OS X標準のファイルシステム「HFS Plus」では、メタデータは「拡張アトリビュート(EA、Extended Attributes)」と呼ばれる領域に保存される。任意のタグはFinderの「情報」ウインドウで設定することがオーソドックスな方法だが、直接EAにアクセスできるコマンド「xattr」を利用すれば、Terminalでも設定可能だ。

xattrコマンドで指定する拡張アトリビュートは、試行錯誤したところ「com.apple.metadata:_kMDItemUserTags」と見当がついた。以下のとおりコマンドを実行すれば、Spotlightのデータベースに反映され、Spotlightフィールドやmdfindコマンドから検索できるタグとなる。しかし、この方法で登録したタグはなぜかFinderの情報ウインドウには反映されず(タグ入力欄に表示されない)、他の設定済のタグを上書きしてしまう。使い方が確立されるまでは、Finderの情報ウインドウで設定したほうがよさそうだ。

$ xattr -w com.apple.metadata:_kMDItemUserTags 'タグ' ファイル名

このように、Spotlightから支障なく検索できるタグとして登録されたが……Finderの情報ウインドウには表示されないのだった