mdls

10.4の新機能Spotlight、慣れるまではそれほどでもありませんでしたが、慣れてくると便利ですね。検索も速いし。毎回毎回ファイルを見に行ってはこんなに速いはずがありませんね。ファイルが持っているメタデータを索引に格納しておいて、その索引を調べるから速いんですね。「メタデータ」というのは、「データについてのデータ」、つまり「このファイル何者よ」というのを表すデータです。
となると、気になるのは、このファイルはどんなメタデータを持っているのだろう、ということです(気になりませんか?そうですか。では、話の都合です。気になることにしてください)。そのファイルがどんなメタデータを持っているのか調べるコマンドが「mdls」です。書式は「mdls 調べたいファイル」というごく簡単なものです。「mdls」と打ち込んだ後に、ターミナルのウィンドウにファイルをドロップしてしまえば楽です。

まずは、このサイトのトップページのファイルで試してみましょう。

PowerBookG4:~ hiro$ mdls /Users/hiro/Documents/¥~nashorn/index.html 
/Users/hiro/Documents/~nashorn/index.html -------------
kMDItemAttributeChangeDate     = 2005-08-28 10:48:36 +0900
kMDItemComment                 = "この間までUnixに対して縁の無かった筆者が、MacOS XのTerminal(中略)温泉の紹介もします。"
kMDItemContentCreationDate     = 2005-08-28 10:48:00 +0900
kMDItemContentModificationDate = 2005-08-28 10:48:00 +0900
kMDItemContentType             = "public.html"
kMDItemContentTypeTree         = ("public.html", "public.text", "public.data", "public.item", "public.content")
kMDItemDisplayName             = "index.html"
kMDItemFSContentChangeDate     = 2005-08-28 10:48:00 +0900
kMDItemFSCreationDate          = 2005-08-28 10:48:00 +0900
kMDItemFSCreatorCode           = 0
kMDItemFSFinderFlags           = 0
kMDItemFSInvisible             = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "index.html"
kMDItemFSNodeCount             = 0
kMDItemFSOwnerGroupID          = 501
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 7839
kMDItemFSTypeCode              = 0
kMDItemID                      = 1538987
kMDItemKeywords                = (Mac, OS, "X,terminal,¥U6e29¥U6cc9")
kMDItemKind                    = "HTML Document"
kMDItemLastUsedDate            = 2005-05-21 23:15:51 +0900
kMDItemTitle                   = "Hiro's Personal Pages"
kMDItemUsedDates               = (2005-04-29 23:01:06 +0900, 2005-05-21 09:00:00 +0900)

いろいろ出ましたね。HTMLファイルの場合、ファイルの種類や名前、サイズ、更新日と行ったごく基本的な情報のほかにも、kMDItemCommentにmetaタグのdescriptionが"kMDItemComment"に、keywordsが"kMDItemKeywords"に、titleタグの内容が"kMDItemTitle"として索引に取り込まれるようですね。

HTMLのような一般的なファイルなら上記のように様々な情報を索引化できますが、特定のソフトで生成したファイルとなると、ソフト側の対応次第ということになります。
例えば、日本では激しくマイナーな表計算ソフトMariner Calcのファイルをmdlsで調べてみると

PowerBookG4:~ hiro$ mdls /Users/hiro/Desktop/mariner 
/Users/hiro/Desktop/mariner -------------
kMDItemAttributeChangeDate     = 2005-09-11 19:44:32 +0900
kMDItemContentCreationDate     = 2005-09-11 19:44:03 +0900
kMDItemContentModificationDate = 2005-09-11 19:44:03 +0900
kMDItemContentType             = "dyn.ah62d4rv4gk8zgwbyna"
kMDItemContentTypeTree         = ("public.data", "public.item")
kMDItemDisplayName             = "mariner"
kMDItemFSContentChangeDate     = 2005-09-11 19:44:03 +0900
kMDItemFSCreationDate          = 2005-09-11 19:44:03 +0900
kMDItemFSCreatorCode           = 1346458194
kMDItemFSFinderFlags           = 0
kMDItemFSInvisible             = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "mariner"
kMDItemFSNodeCount             = 0
kMDItemFSOwnerGroupID          = 501
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 8492
kMDItemFSTypeCode              = 1397240912
kMDItemID                      = 1924784
kMDItemKind                    = "Mariner Spreadsheet Document"
kMDItemLastUsedDate            = 2005-09-11 19:44:03 +0900
kMDItemUsedDates               = (2005-09-11 19:44:03 +0900)

ごく基本的な情報のほかにはMarinerのファイルであることぐらいしか分かりません。

一方、比較的早期に10.4に対応したMicro$oft Wordのファイルを調べてみると、

PowerBookG4:~ hiro$ mdls /Users/hiro/Documents/myStory/corbitte.doc 
/Users/hiro/Documents/myStory/corbitte.doc -------------
kMDItemAttributeChangeDate     = 2005-05-21 23:11:35 +0900
kMDItemContentCreationDate     = 2002-09-23 02:04:46 +0900
kMDItemContentModificationDate = 2004-09-30 01:13:47 +0900
kMDItemContentType             = "com.microsoft.word.doc"
kMDItemContentTypeTree         = (
    "com.microsoft.word.doc", 
    "public.data", 
    "public.item", 
    "public.composite-content", 
    "public.content"
)
kMDItemDisplayName             = "corbitte.doc"
kMDItemFSContentChangeDate     = 2004-09-30 01:13:47 +0900
kMDItemFSCreationDate          = 2002-09-23 02:04:46 +0900
kMDItemFSCreatorCode           = 1297307460
kMDItemFSFinderFlags           = 256
kMDItemFSInvisible             = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "corbitte.doc"
kMDItemFSNodeCount             = 0
kMDItemFSOwnerGroupID          = 501
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 21278
kMDItemFSTypeCode              = 1463304782
kMDItemID                      = 21158
kMDItemKind                    = "Microsoft Word 文書"
kMDItemLastUsedDate            = 2005-05-21 23:11:08 +0900
kMDItemTitle                   = "   スコットランド 一六四四年"
kMDItemUsedDates               = (2004-09-30 01:13:47 +0900, 2005-05-21 09:00:00 +0900)

"kMDItemTitle"として最初の行の内容が表示されています。

mdlsで使えるオプションは今のところ特定の項目だけを表示させる「-name」オプションだけです。「mdls -name 表示させてい項目 調べたいファイル」とします。
試しに、HTMLファイルのtitle(kMDItemTitle)だけ表示させてみましょう。

PowerBookG4:~ hiro$ mdls -name kMDItemTitle /Users/hiro/Documents/¥~nashorn/index.html 
/Users/hiro/Documents/~nashorn/index.html -------------
kMDItemTitle = "Hiro's Personal Pages"

複数の項目を表示させたい場合、このように-nameのあとに幾つも書くと、

PowerBookG4:~ hiro$ mdls -name kMDItemTitle kMDItemKeywords /Users/hiro/Documents/¥~nashorn/index.html dex.html 
kMDItemKeywords -------------
mdls: could not find kMDItemKeywords.

2つめの項目がファイル名だと勘違いして、そんなファイルはねえぞ、と言われてしまいます。

複数の項目を表示させたい場合は、「-name 表示させてい項目」という単位で幾つも書くことになります。

PowerBookG4:~ hiro$ mdls -name kMDItemTitle -name kMDItemKeywords /Users/hiro/Documents/¥~nashorn/index.html 
/Users/hiro/Documents/~nashorn/index.html -------------
kMDItemKeywords = (Mac, OS, "X,terminal,¥U6e29¥U6cc9")
kMDItemTitle    = "Hiro's Personal Pages"