ディスク上のディレクトリを実際に走査せずにファイル名で検索するには、locateを使えます。ディレクトリの走査は遅くなる場合があります。locateは、指定した各シェルパターンについて、1つ以上のファイル名データベースを検索し、そのパターンを含むファイル名を表示します。シェルパターンの詳細については、シェルのパターンマッチングを参照してください。
パターンがメタ文字を含まない単なる文字列の場合、locateは、その文字列を含むデータベース内のすべてのファイル名を表示します。パターンにメタ文字が含まれる場合、locateはパターン全体に正確に一致するファイル名だけを表示します。そのため、メタ文字を含むパターンは、通常「*」で始め、末尾にも付けることが多くなります。ファイル名の先頭または末尾に明示的に一致させたいパターンは例外です。
locateでファイル名の最後の要素、つまりベース名だけを照合したい場合は、「--basename」オプションを使えます。既定ではその反対の動作になりますが、「--wholename」オプションで明示的に選ぶこともできます。
次のコマンドは、
locate pattern
次のコマンドとほぼ同じです。
find directories -name pattern
ここで、directoriesはファイル名データベースに情報が収録されているディレクトリです。違いは、locateの情報が古い可能性があることと、locateが既定でベース名だけでなくファイル名全体に対してワイルドカードを照合することです(シェルのパターンマッチングを参照)。
ファイル名データベースには、最後に更新した時点でシステム上にあったファイルの一覧が格納されています。システム管理者は、既定のデータベースのファイル名、更新頻度、収録するディレクトリを選べます。
locateが検索するファイル名データベースを選ぶ方法を示します。既定値はシステムによって異なります。この文書を生成した時点の既定値は/usr/local/var/locatedbでした。
--database=path-d path既定のファイル名データベースの代わりに、pathに指定したデータベースを検索します。これは、データベースのファイル名をコロンで区切った一覧です。検索するデータベースファイルの一覧は、環境変数LOCATE_PATHでも設定できます。両方を使った場合、オプションが環境変数に優先します。
GNU locateは、slocateパッケージが生成したファイル名データベースを読み取れます。ただし、そのデータベースは一般にシステム上のすべてのファイルの一覧を含むため、locateは、そのデータベースを使うとき、ユーザーがアクセスできるファイルだけを表示します。この処理に使う「--existing」オプションについては、locateの呼び出しを参照してください。
updatedbも、slocateと互換性のある形式でデータベースを生成できます。その「--dbformat」と「--output」オプションについては、updatedbの呼び出しを参照してください。