多くのテキストファイルを含むディレクトリツリーがあります。すべてのファイルをすばやく検索できるように、これらすべてのファイルのフルテキスト(特定のファイル拡張子を持つファイルは無視)を索引付けしたいと思います。
フルホームディレクトリやシステム全体をインデックス化したくありません。この特定のディレクトリだけをインデックス化したいと思います。
インデックスは常に更新され、内部ファイルの変更を自動的に検出する必要があります。
これを達成するためにどのツールを使用できますか?
答え1
「ファイルの変更を自動的に検出する」という要件に加えて、GNUはこれを行うことができます。id-utils。これは、クエリツールや他のツールで使用するためにmkid
呼び出されるバイナリデータベースファイルを構築するためのツールを提供します。ID
lid
Id-utilsはプログラミング指向であり、設定可能なファイルに基づくid-lang.map
サフィックスでファイルタイプを識別します。ファイルのトークンを正しく処理するためにサポートしている各タイプに別々のスキャナーがあります。mkid
認識できないファイル形式の代替スキャナとして使用できるテキストファイル用の代替スキャナがあります。mkid
空id-lang.map
のファイルを直接ポイントすると、テキストスキャナを使用してすべてを処理すると思います。
mkid
インデックスツリーは非常に高速で、クエリは非常に高速です。
ソースコードナビゲーションのためにVimと統合しました。 cscopeなどの別々のツールを使用するよりも便利です。次の 2 つの設定を使用します。
:set grepprg=lid\ --regex\ --result=grep\ '$*'\ \\\|\ sort\ -u\ -t\ :\ -k\ 1,1\ -k\ 2,2n
:set grepformat=%f:%l:%m
Vimコマンドの基礎としてIDデータベースを使用できます:grep
。たとえば、見つかった:grep foo
すべての場所の閲覧可能なリストが表示されます。foo
sort
一致は興味深い順序で出力されるため、上記の定義の手順がgrepprg
必要です。lid
内部的にハッシュやその他のタスクを実行します。