名前

locate - ファイル名データベースからパターンに合うものを表示する

書式

locate [-d path | --database=path] [-e | -E | --[non-]existing] [-i | --ignore-case] [-0 | --null] [-c | --count] [-w | --wholename] [-b | --basename] [-l N | --limit=N] [-S | --statistics] [-r | --regex ] [--regextype R] [--max-database-age D] [-P | -H | --nofollow] [-L | --follow] [--version] [-A | --all] [-p | --print] [--help] pattern...

説明

このマニュアルページは GNU 版 locate の使用法を説明しています。 locate は、 指定された各パターンに対して、 一つまたは複数のファイル名データベースを検索して、 パターンに一致するファイル名を表示します。 パターンには、 シェルで用いるようなメタキャラクター (`*', `?' 及び `[]') が利用できます。 メタキャラクターは `/' や `.' を特別扱いしません。 したがって `foo*bar' というパターンは、 `foo3/bar' というファイル名に一致します。 また `*duck*' というパターンは、 `lake/.ducky' に一致します。 メタキャラクターを含むパターンは、 シェルによって展開されないようにクォートで囲む必要があります。

パターンが通常の文字列である場合、 つまりメタキャラクターを含んでいない場合、 locate は、 ファイル名のどこかにその文字列が含まれているようなファイルをすべて表示します。 パターンにメタキャラクターが含まれる場合、 locate は、 パターンに一致するファイル名だけを表示します。 このことから、 メタキャラクターを含むパターンには、 通常は先頭に `*' をつけておいてください。 同じように、 最後にもたいていは `*' をつけておきます。 ただしファイル名の先頭または最後に、 意図的に一致させたいパターンとするのであれば、 その必要はありません。

ファイル名データベースは、 最後に更新された時点において、 システムに存在していたファイルのリストからなっています。システム管理者はデフォルトで用いるデータベースのファイル名や更新の頻度、 またどのディレクトリの情報をデータベースに入れるかなどを選択することができます。updatedb(1) を参照してください。

locate は端末に対して出力を行ないます。 出力に適さない文字はエスケープ出力されます。 これは find コマンドの -print 処理と同様にして行われます。 出力先が端末でない場合、 ファイル名はその文字のまま出力されます。

オプション

-0, --null

区切り文字として、 改行文字ではなく ASCII NUL 文字を用います。

-A, --all

必須の引数すべてに一致する名前のみを表示します。 つまりすべてに一致せず、 1 つやその一部にのみに一致するものは表示しません。

-b, --basename

指定されたパターンが、 データベース内にあるファイル名の最後の構成要素に一致した場合に、 出力結果として一致したものとします。 最後の構成要素は、 通常「ベース名」と表現されます。

-c, --count

一致したファイル名を出力するのではなく、 一致した総数を出力します。 ただし --print (-p) も指定された場合は除きます。

-d path, --database=path

デフォルトのファイル名データベースを検索するのではなく、 path にあるファイル名データベースを検索します。 複数のデータベースファイルは、 コロンで区切って指定します。 環境変数 LOCATE_PATH を利用して、 検索するデータベースファイルを指定することもできます。 オプションと環境変数がともに指定された場合は、 オプションが優先されます。 パス指定に空の要素が指定された場合は、 デフォルトのデータベースファイル名と同義であるものとして扱われます。 データベースは stdin から指定することもできます。 これを行う場合は path の要素として `-' を利用します。 path の構成要素に複数の `-' が指定されていた場合、 2 つめ以降は無視されます (そして警告メッセージが出力されます)。

ファイル名データベースのフォーマットは、 GNU findlocate のバージョン 4.0 から変更されました。 このフォーマットによって、 バイトオーダーが異なるマシン間においても、 データベースが共有できるようになりました。 locate の本バージョンでは、 GNU locate の旧バージョン、 あるいは Unix バージョンの locatefind を自動的に識別して読み込みを行ないます。 古い locate のデータベースフォーマットへのサポートは、 今後のリリースにおいては継続しません。

-e, --existing

現在存在している名前のみを表示します (データベースが生成された際に存在していた名前を表示するわけではありません)。 なおデータベース内に一致する名前が多数存在していると、 プログラム処理速度が多少低下することがあります。 プログラム内においてこのオプションを利用している場合は、 locate がチェックした後のファイルは、 削除されてしまい、 確認できないことがある点に注意してください。

-E, --non-existing

現在存在していない名前のみを表示します (データベースが生成された際に存在していた名前を表示するのではありません)。 なおデータベース内に一致する名前が多数存在していると、 プログラム処理速度が多少低下することがあります。

--help

locate のオプション概要を表示して終了します。

-i, --ignore-case

パターンとファイル名において、 英字の大文字小文字を区別しません。

-l N, --limit=N

一致する数を N に制限します。 制限数を本オプションにより設定した場合、 -c オプションによって表示される結果数は、 本オプションの値を上回ることはありません。

-L, --follow

(-e や -E オプションとともに使って) ファイルの存在チェックを行う場合、 シンボリックリンクが壊れている場合には、 存在していないものとして扱います。 これはデフォルトの動作です。

--max-database-age D

通常 locate は、 検索するデータベースが 8 日以上古かった場合に、 警告メッセージを表示します。 このオプションは、 その日数を 8 日以外のものに設定する場合に用います。 負数を指定した場合の動作は未定です。

-m, --mmap

指定可能ですが、 ただし何も行いません。 これは BSD 版の locate との互換性のために存在しています。

-P, -H, --nofollow

(-e や -E オプションとともに使って) ファイルの存在チェックを行う場合、 シンボリックリンクが壊れている場合には、 存在してるものとして扱います。 本オプションの -H 形式は、 find に合わせるために提供されています。 したがって -H よりも -P を用いることが推奨されます。

-p, --print

--statistics (-S) や --count (-c) が指定されているために、 検索結果が表示されないものについて、 その結果を表示します。

-r, --regex

コマンドライン上から指定されるこのパターンは、 glob パターンとしてではなく、 正規表現として解釈されます。 この正規表現は、 emacs 内において用いられるものと同様のものでしたが、 "." が改行文字として扱われるという違いがありました。 GNU find では、 同じ正規表現が用いられます。 ファイル名のフルパスが、 指定された正規表現にマッチするときに、 そのファイル名が表示されます (または -c オプションが指定された場合、 その数がカウントされます)。 正規表現を使ってフルパスの前後を完全に一致させたい場合は、 正規表現においてよく用いるように、 ^ と $ の文字を用いて指定します。

--regextype R

正規表現の方言である R を用います。 サポートされる方言は以下です。 `findutils-default', `posix-awk', `posix-basic', `posix-egrep', `posix-extended', `posix-minimal-basic', `awk', `ed', `egrep', `emacs', `gnu-awk', `grep', `sed' 。 この方言の詳細な説明は Texinfo ドキュメントを参照してください。

-s, --stdio

指定可能ですが、 ただし何も行いません。 これは BSD 版の locate との互換性のために存在しています。

-S, --statistics

各 locate データベースについての統計情報を表示します。 必須の引数が指定されていなければ、 検索処理は行わずに終了します。 BSD 版との互換性のために、 --statistics と同じ意味で -S が受け付けられます。 ただし locate -S による出力結果は、 locate の GNU 版と BSD 版では異なります。

--version

locate のバージョン番号を表示して終了します。

-w, --wholename

データベース内に保持されているファイル名との完全一致を行います。 これはデフォルトの動作です。

環境変数

LOCATE_PATH

検索するデータベース名をコロンで区切ったリスト。 この設定値の先頭あるいは末尾にコロンを設定するか、 あるいは設定内に 2 つのコロンを含めると、 locate の異なるバージョン間において、 検索結果が異なることになります。

履歴

locate プログラムは、 プログラムの高速検索のために、 James A. Woods が BSD に提供したところから始まりました。 これは以下の論文において説明されたものです。 Finding Files Fast which was published in Usenix ;login:, Vol 8, No 1, February/March, 1983, pp. 8-10. find プログラムのアクションが指定されなかった場合に、 -print アクションがデフォルトとして扱われるようになり、 find pattern の実装が変更されました。 そこで BSD 開発者は、 この高速検索機能を locate に移転しました。 GNU による locate も、 同一のコードに基づいて実装されています。

locate の主要な変更を、 以下に降順で示します。

4.3.7 旧DBフォーマットにてバイトオーダー順に依存しない対応。
4.3.3 locate の -i がマルチバイト文字を適切に対応。
--max_db_age の導入。
4.3.2 slocate データベースフォーマットの導入。
4.2.22 --all オプションの導入。
4.2.15 --regex オプションの導入。
4.2.14 -L, -P, -H の各オプションの導入。
4.2.12 LOCATE_PATH における空指定は、 デフォルトデータベースを表します。
4.2.11 --statistics オプションの導入。
4.2.4 --count--limit の導入。
4.2.0 glob 文字がファイル名全体に一致するように。
4.0 LACATE02 データベースフォーマットの導入。
3.7 Locate が複数データベースを検索できるようにします。

バグ

locate データベースは、 改行文字を含むファイル名でも適切に処理を行います。 ただしそれは、 システムの sort コマンドの -z オプションが正しく動作する場合です。 locate が返すファイル名に改行文字が含まれているべき、 と思われる場合には、 --null オプションの利用を検討してください。

バグ報告

GNU findutils オンラインヘルプ: <https://www.gnu.org/software/findutils/#get-help>
翻訳に関するバグ報告 <https://translationproject.org/team/>

その他の問題について GNU Savannah バグトラッカー経由での報告:

<https://savannah.gnu.org/bugs/?group=findutils>

GNU findutils パッケージのメーリングリスト bug-findutils において議論されている全般的なトピック:

<https://lists.gnu.org/mailman/listinfo/bug-findutils>

著作権

Copyright © 1994-2022 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

関連項目

find(1), updatedb(1), xargs(1), glob(3), locatedb(5)

完全なドキュメント <https://www.gnu.org/software/findutils/locate>
またローカルにおいては info locate により参照できます。