locateでファイルシステムからファイルを検索する

locateはUNIXコマンドのひとつで,あらかじめ構築しておいたデータベースを利用することでファイルシステム全体から目的のファイルを探し出すことができます.find / -name test.datなどとするよりも高速に検索結果を得ることができます.locateの利用にはファイルシステムのデータベースが必要になります.データベースが作られていない状態でlocateを実行すると,次のような出力を得ます.

$ locate test.dat

WARNING: The locate database (/var/db/locate.database) does not exist.

To create the database, run the following command:

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

Please be aware that the database can take some time to generate; once

the database has been created, this message will no longer appear.

ここで,言われるままに

$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

としてから再びlocateしても同様のエラーが出て使えないことがあります.どういうわけか上記のlaunchctlが実行開始直後に終了してしまい,/var/db/locate.databaseが作られていないということがあります.そういうときは

$ sudo /usr/libexec/locate.updatedb

としてデータベースをアップデートしようとすると,今度はきちんとデータベースが作成されてlocateが使えるようになります.また,この操作は検索漏れを防ぐために定期的に行なった方がよいです.いったんデータベースが作成されれば次回以降の更新は比較的短時間で済みます.

とはいえ,locateするたびにデータベースを更新するのもいささか面倒に感じられます.Mac OSの場合はspotlightのコマンド版であるmdfindを利用するのが便利です.使い方は簡単で,

mdfind test.dat

とすればファイルシステム全体からtest.datを検索できます.locateの場合と異なり,データベースに相当する情報は自動的に構築,更新されるためユーザが行うべき準備はありません.動作も高速です.mdfindの特徴として,このコマンドでの検索対象がファイル名だけでなくファイルの中身も含まれているということが挙げられます.すなわち,上記のコマンドではtest.datを文字列として含むソースコードなども検索されます.関数やクラスの名前を手掛かりにファイルを探したいときに役立ちます.

ファイル名に限定して検索したい場合は

mdfind -name test.dat

とすればよいです.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA