「検索」速度を上げる方法はありますか


15

findターミナルの速度を上げる方法があるのだろうか、インターネットgoogleを使用して検索することは、文字列やファイル名だけをローカルに検索するよりも高速であるとは意味がありません。

一度構築されたローカルインデックスベースを使用する方法があるのではないかと思っていますが、将来的には、findコマンドは非常に高速になります。

または他の提案?

ありがとう!


オペレーティングシステムやディストリビューションで投稿を編集できますか?
ジョディC

回答:


15

を使用してみてくださいlocate、それはあなたが望むことをするはずです。


13
通常、答えをもう少し具体化することをお勧めします。どのパッケージlocateが(通常slocate)に由来しupdatedb、DBの再構築に使用するかについて言及するように。:-)
パトリック

1
これは、インデックス作成がオフになっているパーティションでは機能しません。たとえば、インデックス作成が有効になっているとNTFSパーティションのパフォーマンスが低下するため、「必要に応じて」ロケートが機能しません。
-ojrask

9

検索条件に大きく依存します。

使用されるインデックスは、通常、1日1回のみ更新されるため、あなたは、ファイル名やファイル名のパターンを検索見つけた場合は、新鮮に生成されたファイルに適してはるかに高速ですが、ありません。ただし、使用できる場合は、非常に高速です。

ただし、findを使用すると、locateでは検索できないファイルサイズ、ファイル経過時間などを検索できます。

検索する場所がわかっている場合は、パスを使用して検索範囲を区切ることができます。

find /some/path -size -10M -size +2M -mtime -365 ...

/ some / pathで最大1年前の2〜10 Mのファイルのみを検索します。

パスで利用可能なプログラムは、whereisでwhich、help、lib、および構成ファイルを検索できます。例:

which java
/usr/bin/java

whereis firefox 
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/share/firefox /usr/share/man/man1/firefox.1.gz

7

使用する locate

理由は、あなたが想像したとおりにすでに構築されているlocateすべての既存のディレクトリとファイルのデータベースを使用するからです!http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

一定の(および変更可能な)間隔で、ジョブの実行によりファイルシステムがスキャンされ、それを使用してデータベースが構築されます。次に、このデータベース(locatedb)に、適切なインデックスを使用して、locateその時点でハードドライブをスキャンする代わりに、コマンドの対象になります。

そのため、ハードドライブスキャンと比較して非常に高速であるという利点があります。欠点は、ロケートデータベース(locatedb)が「ライブ」ではないため、最後のスキャンの時点で存在していたファイルにのみ使用できることです。

現在、locatedbを更新するにはupdatedb(またはsudo updatedb必要に応じて)

ところで私はちょうどsudo updatedbローカルで走った、それは3 1/2秒かかりました!31,000個のファイルがあります。


1

他の人が指摘したように、ロケーターはよりシンプルな検索者にとってより良いツールかもしれません。

ただし、より複雑な検索の場合は、おそらく検索で行き詰まっています。

検索を高速化する1つの方法は、すべてのルートディレクトリを検索する代わりに、ファイルが存在するディレクトリを絞り込むことです。


0

単一の検索操作の場合。スピードアップは見つかりませんでした。findオプションを使用して検索を絞り込む場合を除きます。

しかしながら; 同じファイルセットに対して複数のfind操作を実行する場合。一時ファイルにすべてのファイル名を入力して使用すると、大幅に高速化されましたgrep。もちろん、これは追加または削除されたファイルを考慮しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.