locate
は事前に構築されたデータベースを使用します。これは定期的に更新する必要がありますが、find
はファイルシステムを反復してファイルを探します。
したがって、locate
はfind
よりもはるかに高速ですが、データベースが(キャッシュとして認識できる)更新されていない場合は不正確になる可能性があります(updatedb
コマンドを参照)。
また、find
は、ファイルのすべての属性でファイルをフィルタリングできるので、より細分性を提供できますが、locate
は、ファイル名と一致するパターンを使用します。
find
は、UNIXの初心者またはたまに使用するユーザーが、manページを注意深く熟読しないと正常に使用することはできません。歴史的に、find
の一部のバージョンは-print
オプション、ユーザーの敵意に追加します。
locate
は柔軟性が低くなりますが、一般的なケースで使用する方がはるかに直感的です。
Locateのわずかな欠点は、関心のあるファイルシステムの領域にインデックスが作成されない可能性があることです。Debianデスクトップシステム(Linux Mint 17.2など)では、/ etc/updatedb.confファイルは特定の領域を考慮から除外するように構成されています、/ tmp、/ var/spool、/ home/.ecryptfsなど。
/home/.ecryptfsを無視すると、暗号化されたディレクトリ内のファイル名が権限のないユーザーに公開されるのを防ぎます。ただし、ホームディレクトリがecryptfsで暗号化されている場合は、ホームディレクトリにインデックスが作成されていないため、locateはホームディレクトリで何も検出しません。これは、あなたにとってはほとんど役に立たないかもしれません(私にとってはそうです)。結果が見つからないことに加えて、updatedbプロセスは定期的にディスクをロードして何のメリットもありません。また、システムのメインユーザーまたは唯一のユーザーである場合は無効にされる場合もあります。