ファイルの検索がうまくいかないとき|確かめる順番と切り分け

ファイルの検索が期待どおりに動かないとき、多くの人が最初にやるのは索引の作り直しです。これは順番として損をします。作り直しはデータ量によっては数時間から数日かかる作業で、その間は検索がさらに効かなくなり、しかも原因が別のところにあれば時間だけが消えます。ここでは、手を動かす前に症状を4つに分け、原因の当たりを付けてから確認していく順番を整理します。作り直しは、他を全部潰してから触る最後の手段として置きます。

症状を4つに分けると、確認する場所が変わる

「検索がおかしい」という言い方の中には、原因の異なる4つの状態が混ざっています。先にどれなのかを決めると、確認すべき場所が絞られます。

症状 起きていること 最初に疑う場所
何も出ない 条件に合う対象が、見ている範囲の中に無い 検索の範囲設定
特定の1件だけ出ない その1件が目録に載っていない 除外設定、フォルダ名、形式
結果が古い 目録の更新が追いついていない 索引の状態、保存直後かどうか
多すぎて見つからない 条件が広すぎる、本文にも当たっている 条件の作り方

この分類が効くのは、1つ目と2つ目で打つ手がまったく違うからです。何も出ないのは範囲の問題であることが多く、特定の1件だけ出ないのは目録の問題であることが多い。前者に対して索引を触っても改善しませんし、後者に対して条件を書き直しても改善しません。

4つのどれなのか分からない場合は、確実に存在すると分かっているファイルを1つ決めて、それで試します。基準になる1件があると、自分の記憶違いなのか仕組みの問題なのかを分けられます。

まず確かめるのは索引ではなく、検索が見ている範囲

Finderの検索窓に文字を打ったとき、その検索が対象にしている範囲は2つのうちどちらかです。開いていたフォルダの中だけか、Mac全体か。結果の上部に切り替えが並んでいるので、どちらが選ばれているかを見ます。

見落とされやすいのは、この初期値が設定で決まっている点です。Finderの設定には、検索を実行したときに何を対象にするかを決める項目があります。ここが現在のフォルダを対象にする設定になっていれば、デスクトップから検索したときはデスクトップの中しか見ません。書類フォルダに保存したファイルは、当然出てきません。「何も出ない」の相当な割合が、この1項目で説明できます。

次に見るのは、打った文字がファイル名に当たっているのか、本文に当たっているのかです。既定では両方が対象になるため、名前で絞ったつもりでも本文が当たって件数が膨らみます。逆に、名前の一部しか覚えていないのに漢字の変換が違っていれば、名前にも本文にも当たりません。この場合はひらがなだけ、あるいは英数字だけといった、変換に依存しない部分で試すと当たることがあります。

範囲の設定と条件の当たり先。この2つを確かめるのに1分もかかりません。索引に触るのはこの後です。

存在することを、索引を使わない方法で確かめる

範囲を直しても出てこないなら、次は切り分けの工程に入ります。ここで使うのが、索引をまったく使わない道具です。

ターミナルでfindコマンドを使うと、指定した場所から下のフォルダを順に開いて名前を突き合わせます。目録を参照しないので、目録が壊れていても、作られていなくても答えが返ります。たとえばホームフォルダ以下で名前に特定の語を含むものを探せば、その語を含むファイルが本当に存在するかどうかが分かります。

この結果で、原因が2つに分かれます。

  • findで見つかり、Finderやmdfindで見つからない。ファイルは存在していて、目録の側に問題がある
  • findでも見つからない。探している場所が違うか、名前の記憶が違う。目録は関係ない

ここで押さえておきたいのは、Finderの検索窓とmdfindが同じ目録を引いているという事実です。Finderで出ないものをmdfindで確かめても、同じ答えが返るだけで切り分けになりません。対照実験として成立するのは、目録を使わないfindのほうです。

なお、macOSに入っているfindはBSD系の実装で、Linux向けの解説で見かけるGNU系とは引数の書き方が違う部分があります。ネットで拾ったコマンドがそのまま動かないときは、実装の違いを先に疑うと早く済みます。GNU側の仕様はGNU Coreutilsで公開されています。

索引が有効かどうかを、推測せずに尋ねる

目録の側に問題があると分かったら、次は目録が作られているのかどうかを直接確認します。mdutil -s /と打つと、そのボリュームで索引作成が有効になっているかどうかが返ります。外付けドライブならmdutil -s /Volumes/に続けてドライブ名を指定します。

外付けドライブとネットワーク上の共有は、ここで引っかかることが多い場所です。つないだ直後は目録が存在しないため、索引を引く検索には何も出てきません。ファイルは目の前に見えているのに検索に出ない、という分かりやすい形で症状が出ます。この場合は索引を有効にするか、findのように目録を使わない方法に切り替えるかの二択です。

Time Machineのバックアップ用ディスクは扱いが別で、Time Machineが正常に動くために索引作成が続く仕様になっています。ここを止めようとして時間を使う必要はありません。

「その1件だけ出ない」ときに見る3か所

特定のファイルだけが出てこない場合、疑う場所は3つに絞られます。

1つ目は除外設定です。Spotlightの設定には、検索の対象から外すフォルダやディスクを登録する欄があります。ここに入っているフォルダの中身は、何を打っても出てきません。除外には副作用があり、Appleは公式のユーザガイドで次のように注意しています。

重要: 特定のファイルやフォルダを除外すると、一部のアプリのアップデートが利用可能になったときに通知されない場合があります。内蔵ディスク全体を除外すると、アップデートは通知されなくなります。 出典: support.apple.com

検索に出ないという症状と、更新が通知されないという症状が同時に起きているなら、除外設定を最初に見る根拠になります。

2つ目はフォルダの名前です。名前が.noindexで終わるフォルダは、中身ごと目録から外れます。自分で付けた覚えがなくても、アプリが作業用に作ったフォルダがこの形をしていることがあります。

3つ目は形式です。本文の読み取りに対応していない形式のファイルは、名前や日付では見つかりますが、中に書かれた語では見つかりません。「中身は確かにこう書いてあるのに出ない」という症状は、たいていこれです。この場合は、日付や場所で候補を絞ってから、中身を直接読む道具に渡します。

このほか、ZIPの中身、マウントしていないディスクイメージの中身、写真やメールのライブラリの内部は、容器を開かない限り見えません。

打ち間違いではないのに名前が一致しない、という現象もあります。原因は文字の表し方の違いです。macOSはファイル名の濁点や半濁点を、文字そのものと記号に分けて保持する形を取ります。見た目は同じ「が」でも、他の場所からコピーしてきた文字列とは内部の並びが違うことがあり、完全一致で照合すると当たりません。日本語のファイル名で当たらないときは、濁点を含まない部分だけで試すと切り分けられます。全角と半角の英数字、そして長音とハイフンの取り違えも、同じ型の不一致を起こします。

結果が古いとき、多すぎるとき

保存した直後のファイルが出てこないのは、目録への反映が済んでいないだけのことがあります。少し待って再度試し、それでも出ないならmdimportで対象のファイルやフォルダを指定して読み込ませる方法があります。ボリューム全体を作り直すより影響が小さく、時間も短くて済みます。

OSのアップデート直後や、バックアップから復元した直後に検索が効かないのも同じ系統です。この時期は目録の作り直しが裏で走っていて、Appleはその所要時間について、データ量によっては数時間から数日かかるとしています。機械を使わずに、電源につないだ状態で置いておくと早く終わるとも案内されています。ここで作り直しを重ねてかけると、進んでいた分がやり直しになります。

多すぎて見つからない場合は、道具ではなく条件の作り方の問題です。検索条件の行を足して対象を名前に限定する、更新日の範囲を先月に限る、種類を1つに絞る。この3つを組み合わせると、数千件が数十件になります。そして、組み合わせた条件は保存してスマートフォルダとして置いておけます。同じ絞り込みを毎回やり直している作業は、そこで終わりにできます。

判断の材料をどこで確かめるか

ここまでの確認で直る不具合は、設定と切り分けの範囲にあるものです。一方で、確認そのものに時間がかかっているなら、問題の場所が違います。検索して、場所を確かめて、ターミナルでそこへ移動して、中身をAIに渡す。この流れで窓を行き来している回数が多いほど、1回ごとの短さに関係なく合計は膨らみます。

1つの窓の中にフォルダの一覧とターミナルと対話が並ぶ構成が、どこまでを引き受けるのかはできることに整理されています。2画面表示や転送用のクライアントといった既存の分類との重なりは他のファイル管理との比較で並べて確認できます。フォルダとターミナルとAIが同じ窓にある状態は、検索が当たらない不具合を直すものではなく、当たった後の往復を消すためのものです。この区別を付けておくと、道具を替えても症状が残る、という回り道を避けられます。

作業場所を移したあとに続きをやりたい場合の経路はiPhone・iPadから続きを、表示を切り替えられる言語の範囲は対応言語、費用の考え方は料金、導入前に出やすい疑問はよくある質問にまとまっています。

確認の順番は変わりません。症状を4つに分ける。範囲の設定を見る。findで存在を確かめる。mdutilで索引の状態を尋ねる。除外設定とフォルダ名と形式を見る。ここまでで直らなかったものだけを、作り直しの対象にします。

よくある質問

検索が効かないとき、最初に索引を作り直してよい?

順番としては後回しが安全です。索引の作り直しはデータ量によっては数時間から数日かかり、その間は検索がさらに効かなくなります。先に検索の範囲設定を確認し、findコマンドでファイルの存在を確かめ、mdutil -s / で索引が有効かどうかを尋ねる。ここまでで直らないものだけを作り直しの対象にします。

ファイルが存在するのに検索に出ないことを、どう確かめる?

findコマンドは索引を使わずにディスクを直接歩くため、対照実験として使えます。findで見つかってFinderやmdfindで見つからないなら、ファイルは存在していて索引の側に問題があると確定します。Finderとmdfindは同じ索引を引いているので、両方で試しても切り分けにはなりません。

外付けドライブの中身だけが検索に出てこないのはなぜ?

つないだ直後は索引が作られていないためです。mdutil -s /Volumes/ドライブ名 で索引作成が有効かどうかを確認し、無効であれば有効にするか、findのように索引を使わない方法で探します。ファイルが見えているのに検索に出ないという症状は、この状態の典型です。

中身に書いてあるはずの語で検索しても出てこないときは?

本文の読み取りに対応していない形式である可能性が高いです。この場合、名前や日付では見つかっても、中の語では見つかりません。日付や種類や場所で候補を数百件まで絞り込んでから、中身を直接読む道具に渡す方法が現実的です。フォルダ名が.noindexで終わっていないかも併せて確認します。

記事一覧へ戻る