it-swarm-ja.com

greppingよりも高速にファイルを検索する方法はありますか?

コンソールからファイルまたはファイルツリーにインデックスを付けて、部分文字列の検索を単純なgrepよりも高速に実行できるようにする方法はありますか?

大文字と小文字を区別しない方がよいのですが、正規表現のサポートは必ずしも必要ではありません。

locate/slocate/mlocateと同様に機能するシンプルなコンソールユーティリティを探していますが、ファイル名の代わりに、構成可能な場所にある特定のmimeタイプでファイルの内容にインデックスを付けます。

これまでのところ、私が見つけた唯一の「grepより高速な」ソリューションは、UTF-8ではなくANSIに制約されたfgrepです( https://stackoverflow.com/a/13913220/から) 191246 )—印象的なスピードアップを提供しますが、大きなファイルにはまだ遅すぎます。インデックスを作成してそれを検索するための「安価な」方法があるかどうかを知りたいのですが。

オプションとして whoosh を検討していますが、追加のコーディングが必要になります。

ファイルまたはサブフォルダーレベルで詳細なものを探しているので、Macのスポットライトやそれに対応するLinuxのようなシステムレベルのインデックス作成アプリには興味がありません。

2
ccpizza

インデックスを必要としない他の選択肢には、次のものがあります。

ripgrephttps://blog.burntsushi.net/ripgrep/

ag別名シルバーサーチャー: https://geoff.greer.fm/ag/

ackhttps://beyondgrep.com/

1
glallen

Googleコード検索コマンドラインユーティリティ (Goで記述)説明されているユースケースに適合します。

Debian/ubuntuでは、

Sudo apt install codesearch

ソースからコンパイルするには:

まだ存在しない場合は、最初に golang 環境をインストールし、GOPATH変数を定義します。

Sudo mkdir -p /usr/local/go
Sudo chown myusername /usr/local/go

## normally you'd put this in your ~/.bashrc
export GOPATH=/usr/local/go

## on ubuntu/debian:
Sudo apt install golang

## on osx
brew install golang

次に、cindexcsearchをビルドします。

go get github.com/google/codesearch/cmd/...

ソースからインストールすると、$GOPATH/binの下にcindexcsearchが表示されます— $PATHの下のどこかに移動するか、$GOPATH/binを追加します$PATHそしてシェルを更新/再起動します。

使用法

cindex myproject_dir

インデックスは~/.csearchindexに作成されます。

これで、インデックスを検索できます。

csearch sausage-and-spam
2
ccpizza