今回はMacならではの検索について説明します。Macではfindコマンド以外に高速に検索できるコマンドがあります。また、全文検索もできるので便利でしょう。
今回もいつものようにサンプルで利用するファイル・ディレクトリはデスクトップのsampleディレクトリとしています。デスクトップにsampleディレクトリがない場合は作成しておいてください。(コマンド入力ならmkdir ~/Desktop/sampleとして作成することができます)
mdfindコマンド
MacではOSのバージョン10.4からファイルの検索および内容の全文検索を行う機能が搭載されています。検索を行うと裏で動いているSQLiteで処理した結果が出力されるという仕組みです。
・MacのSpotlightで検索する
https://support.apple.com/ja-jp/guide/mac-help/mchlp1008/mac
・SQLite
https://ja.wikipedia.org/wiki/SQLite
まずはmdfindコマンドで使えるオプションを見てみましょう。mdfindとだけ入力するとオプションとコマンドの例が表示されます。
ちなみに裏で動いているSQLiteも以下のように-versionを付けて入力するとバージョン等が表示されます。バージョン指定を忘れてしまった場合には、コマンドプロンプトの状態で最後に.quitと入力すると元のコマンドラインの状態に戻れます。
最初にmdfindを使って拡張子がtxtのファイルを検索してみましょう。以下のように入力します。
mdfind .txt
実行するとたくさん検索結果が表示されます。これは全体から全てのtxtの拡張子のファイルが検索されたためです(実際には本文に.txtが含まれる文字列も検索結果に出力されています)。mdfindは検索するディレクトリを指定しないと全体から検索されてしまいます。特定のディレクトリ内だけを検索するにはオプションを指定する必要があります。デスクトップ上にあるsampleディレクトリ内だけにある拡張子が.txtのファイルを検索するには-onlyinを指定します。-onlyinの後に検索対象とするディレクトリを指定します。
mdfind -onlyin ~/Desktop/sample .txt
カレントディレクトリ内を検索対象にすることもできます。まずは検索するディレクトリに移動します。
cd ~/Desktop/sample
次に-onlyinの後に./を指定し、その後に検索する単語を指定します。
mdfind -onlyin ./ .txt
ここまでの検索オプション指定だとファイル名だけでなく本文の内容も検索対象となっています。今回の例ではsampleディレクトリ内にあるtest.textの内容にsample.txtという文字があるため、検索結果にリストアップされています。
内容検索はしたくない、ファイル名だけを検索対象にしたい場合は-nameを指定します。以下のようにするとファイル名に.txtが含まれるファイルだけがリストアップされます。test.textファイルが検索結果に表れていないのがわかります。
mdfind -onlyin ./ -name .txt
検索した結果、一致する数だけを求める場合は-countを指定します。以下のようにすると-countの後に指定した文字列と一致した数が表示されます。
mdfind -onlyin ./ -count .txt