how to search for files on macは検索欄に書ける|条件の打ち方
how to search for files on macと打って出てくる説明の多くは、検索欄に語を入れて、条件行を足して絞り込む、という手順で終わります。その手順自体は正しいのですが、毎回同じクリックを繰り返すことになり、どんな条件が指定できるのかも画面からは分かりません。実はmacOSの検索欄は、語だけでなく「条件を書いた文字列」を受け付けます。しかも同じ書き方が、Spotlight、Finderの窓、保存した検索、ターミナルのコマンドで共通して通ります。この記事では、その書き方の語彙と、書けるようになっても短くならない工程を分けて整理します。
クリックで作る条件と、打ち込む条件は同じものになる
Finderの検索窓に並ぶ条件行は、条件を組み立てるための道具です。属性を選び、比較の仕方を選び、値を入れると、窓はそれをまとめて1つのメタデータ問い合わせに変換してから照合を始めます。検索欄に kind:pdf と打つのは、同じ問い合わせを1手で書いているだけで、表現できる範囲に差はありません。違うのは、手数と、語彙が見えるかどうかです。
条件行の利点は、存在を知らなかった属性でも見つけられることです。「その他」を選ぶと、macOSが扱う属性が読める名前で一覧になっていて、コピーライトや画素数のように普段意識しないものまで並びます。欠点は、条件を4つ組み合わせるだけで十数回のクリックが要ることと、窓を閉じれば何も残らないことです。
打ち込むキーワードは逆の性質を持ちます。数秒で入力でき、メモに貼っておくことも、あとでスクリプトに埋め込むこともできますが、画面のどこにも「こう書ける」という案内が出ません。Macの検索が語1つで止まりやすいのは、語彙が無いからではなく、あるのに見えないからです。
実務では両方を使うのが早くなります。覚えている部分をキーワードで打ち、キーワードが用意されていない条件、たとえば特定のタグの色や画像の縦横の大きさだけを条件行で足す。この分担にすると、毎回の手数がはっきり減ります。
検索欄がすでに理解しているキーワード
Appleは、Spotlightの検索フィールドとFinderの検索欄で使えるキーワードを公開しています。書き方はどれも共通で、キーワード、コロン、値の順に、コロンの後を空けずに続けます。値が複数語になるときは引用符で囲みます。
| キーワード | 一致するもの | 書き方の例 |
|---|---|---|
| kind: | 項目の種類 | kind:pdf |
| name: | ファイル名に含まれる語 | name:invoice |
| author: | メタデータに入っている作成者 | author:tom |
| by: | 演奏者や制作者の欄 | by:"glenn miller" |
| created: | 作成日 | created:8/16/24 |
| modified: | 変更日。<= や >= が使える | modified:<=7/29/24 |
| date: | 日付。ハイフンで範囲も書ける | date:6/29/24-7/25/24 |
| tag: | Finderのタグ | tag:red |
日本語環境で見落とされがちなのは、これらが日本語表記でも通ることです。Appleの説明では「ニューヨーク市 種類:画像」「作成者:John」「タイトル:ニューヨーク市」といった書き方が例として挙がっています。ほかに「差出人」「宛先」「著者」「共同」「タグ」「件名」「名前」「キーワード」「含む」なども用意されていて、英語のキーワードと同じ働きをします。日本語入力のまま打てるので、変換を切り替える手間が要りません。
注意すべき性質が2つあります。kind: の値は拡張子ではなく項目の種類に照合されるため、kind:image と kind:images は通っても kind:jpeg は通りません。もう1つは置き場所で、キーワードは検索語の前でも後ろでも構いません。「種類:画像 議事録」と「議事録 種類:画像」は同じ結果になります。
AND・OR・NOTと、optionキーで現れる行
キーワードを複数並べると、既定ではANDでつながります。それ以外の関係を表したいときは、演算子を大文字で書きます。author:tom OR author:thom は綴りが確かでない名前を両方拾い、trip -france は先頭のマイナス記号がAND NOTの意味になるので、tripを含みfranceを含まない項目だけが残ります。日付を範囲で指定してから1日だけ除く、といった書き方も同じ要領です。
条件行の側にも同じ仕組みがありますが、こちらは意図的に隠されています。optionキーを押したまま条件行の末尾にあるボタンを見ると表示が変わり、そこをクリックすると「次のいずれかの条件を満たす」「次のすべての条件を満たす」「次のいずれの条件も満たさない」を選ぶ行が追加されます。optionキーを押さずに条件を足していくと、ANDでつながった平らな並びしか作れません。
検索結果には、すべての条件と一致する項目のみが表示されます。 出典: support.apple.com
結果が0件になる原因のほとんどは、この意図しないANDです。名前の条件に日付の条件を足したとき、頭に浮かんでいた日付と、ファイルに記録されている日付が別物だと、正しい結果が全部消えます。Macは作成日、変更日、最後に開いた日を別々に持っているため、この食い違いは珍しくありません。結果が空になったら、書き直すより条件を1つずつ外すほうが原因に早く着きます。
属性の名前は、手元のファイルから読み取れる
キーワードは、もっと長い正式名を持つメタデータ属性の省略形です。属性の数はキーワードよりはるかに多く、ファイルを選んで「ファイル」から「情報を見る」を選ぶと、その一部が読める形で表示されます。1つのファイルについて記録されている属性を全部見たいときは、ターミナルの mdls を使います。
mdls ~/Documents/report.pdf
mdls -name kMDItemContentType -name kMDItemKind ~/Documents/report.pdf
この出力が答えるのは、推測では決して分からない問いです。つまり「探そうとしている情報が、そもそも記録されているのか」です。文字情報を持たないスキャン済みPDFには kMDItemTextContent が入っていないので、どんな検索語でも中身には当たりません。カメラから取り込んだだけのファイルには、ファイル名の属性しか付いていないこともあります。
語彙の全体を見たいときは mdimport -X を使います。macOS 26の環境では属性の定義が1,000行を超えて出力されます。kMDItemPixelHeight(画像の高さ)、kMDItemDurationSeconds(再生時間)、kMDItemWhereFroms(ダウンロード元)のように、キーワードの省略形が用意されていない属性はここにしかありません。これらを使うには、Finderの条件行にあるRAWクエリか、次に触れるコマンドを経由します。
同じ問い合わせをターミナルから実行する
mdfind は、Finderの検索欄と同じ索引に問い合わせるコマンドです。索引に入っていないものは両方から見えないので、結果の範囲は変わりません。増えるのは、探す場所の指定、件数の確認、そして結果を次の処理へ渡せることです。
mdfind -onlyin ~/Projects -count 'kMDItemFSName == "*.md"c'
mdfind -onlyin ~/Documents 'kMDItemContentModificationDate >= $time.today(-7)'
mdfind -0 -onlyin ~/Downloads 'kMDItemFSName == "*.zip"c' | xargs -0 ls -lh
値の後ろに付く c は大文字と小文字を区別しないという指定で、cd にすると濁点や記号の違いも無視します。$time.today(-7) は7日前の0時を指し、条件どうしは && と || でつなぎます。
覚えておくと効くのは4つの指定です。-onlyin は探す範囲をディレクトリ1つに絞り、これがあるかどうかで結果が読める量になるかが決まります。-count はパスの代わりに件数を返すので、条件を信用してよいかを先に確かめられます。-live は実行したまま件数の変化を追い続けます。-interpret は引数をSpotlightの検索フィールドに打ったものとして解釈するため、mdfind -interpret "kind:pdf 議事録" のようにキーワードの書き方をそのまま持ち込めます。
日本語で探すときにだけ起きる詰まり方
日本語のファイル名を扱っていると、英語の解説には出てこない詰まり方が加わります。代表的なのが表記ゆれです。「見積書」と「見積り書」、「サーバ」と「サーバー」、全角の数字と半角の数字は、どれも別の文字列として照合されます。索引は語の意味を揃えてくれないので、思い当たる表記を OR でつないで一度に投げるほうが確実です。名前:見積書 OR 名前:見積り書 のように書けば、どちらの綴りでも拾えます。
濁点の扱いも引っかかります。Macでは、見た目が同じ「ガ」でも、1文字として保存されている場合と、「カ」と濁点の2文字に分かれて保存されている場合があります。iPhoneやカメラから取り込んだファイル、外部のサービスから書き出したファイルで起きやすく、Finderの検索欄からは違いが見えません。ターミナルから探すときに値の後ろへ cd を付けておくと、この違いを無視して照合されます。2つの書き方が混在しているフォルダでは、この1文字の指定が結果を大きく変えます。
もう1つは入力中の確定です。日本語入力で検索欄に打つと、変換が確定するまで検索は始まりません。変換候補を出したままreturnを押すと確定だけが行われ、もう一度returnを押して初めて検索が走ります。「反応しない」と感じる場面のかなりの部分は、この2段階が原因です。
打ち直さないために、問い合わせを保存する
毎月組み立て直す検索は、いつか組み立て間違えます。狙った結果が返るところまで来たら、検索フィールドの下にある「保存」をクリックします。検索はスマートフォルダとして保存され、「サイドバーに追加」を選んでおけば、どのFinderウインドウからも1クリックで開けます。空のスマートフォルダから作り始めたいときは option + command + N です。
スマートフォルダが持っているのは条件であって、ファイルではありません。開くたびに条件が再評価されるので、「この案件フォルダの中で、直近1週間に変更したもの」のような、繰り返し尋ねる問いに向きます。逆に、そこへ入れて片づけるための置き場としては使えません。元のファイルを移動すれば、中身も変わります。
スマートフォルダの条件行は、書いた式をそのまま受け付けます。条件の一覧から「その他」を開き、RAWクエリを選ぶと、mdfind で使うのと同じ kMDItem の式を貼り付けられます。読める名前が用意されていない属性に届く経路はここだけです。ターミナルで試して確かめた式を、書き直さずにFinder側へ移せる、と考えると使いどころがはっきりします。シェル側で同じことをするなら、mdfind -onlyin に固定のディレクトリを与える関数を設定ファイルに入れておきます。どちらも狙いは同じで、考えるのを一度で終わらせることです。
問い合わせがうまくなっても、短くならない工程がある
検索の腕前には上限があり、それは思ったより早く来ます。狙った12件が画面に出た時点で、残っている作業はもう検索ではありません。1件開いて中身を確かめ、残りに同じ処理をかけるためにパスをターミナルへ渡し、一部を別の場所へ移し、そして次の問いが少し違うので最初からやり直す。この往復はキーワードを工夫しても縮みません。
縮まない理由は窓の数にあります。結果の一覧は1つのアプリの中にあり、実行したいコマンドは別のアプリの中にあり、その間はパスを手で運ぶしかありません。フォルダとターミナルとAIが同じ窓にある作りの道具は、この運ぶ工程そのものを消すことを狙っています。何がどこまでできるのかはできることにまとまっていて、既存のファイル管理アプリとの違いは他のファイル管理との比較で条件ごとに並べられています。検索の続きを別の端末で引き取る場面については、iPhone・iPadから続きをが対象になります。
もう1つの上限は、索引が届く範囲です。索引作成を切ってあるボリューム、Spotlightの「検索のプライバシー」に登録したフォルダ、開いていないzipファイルの中には、どれだけ整った式を書いても届きません。書き方に問題が無いのに何も返らないときは、次に確かめるのは語ではなく索引の状態です。
よくある質問
キーワードを複数並べたのに、結果が1件も出ないのはなぜですか?
既定ではキーワードどうしがANDでつながるため、すべての条件を同時に満たすファイルしか残らないからです。特に日付の条件が原因になりやすく、Macは作成日と変更日と最後に開いた日を別々に持っています。書き直す前に、条件を1つずつ外して、どれを外したときに結果が現れるかを確かめてください。
拡張子で探したいときはどう書けばよいですか?
kind: は拡張子ではなく項目の種類に照合されるので、同じ種類として扱われる2つの形式は分けられません。拡張子で分けるには、条件行の「名前」を「が次で終わる」に変えるか、kMDItemFSName == "*.psd"c のような式を使います。この式はスマートフォルダのRAWクエリにそのまま貼り付けられます。
保存や書き出しのダイアログでもキーワードは使えますか?
保存や書き出しの画面にある検索欄も同じ索引を見ているため、種類:や modified: のような書き方はそのまま通ります。ただし条件行と「保存」ボタンが無いので、その場でスマートフォルダにすることはできません。Finderの窓で先に作っておき、ダイアログのサイドバーから開く形にすると同じ条件を使い回せます。
mdfindとFinderの検索で結果が食い違うのはなぜですか?
どちらも同じメタデータの索引を読んでいるので、差はほぼ探す範囲の違いです。Finder側はFinder設定の詳細タブの指定によって現在のフォルダだけを見ていることがあり、mdfind は -onlyin を付けなければ索引が覆う全体を対象にします。同じディレクトリを -onlyin で指定すると、たいてい結果は一致します。