GNU/Linux >> Linux の 問題 >  >> Linux

見つけて見つけるためのより速い代替手段はありますか?

プロジェクト内のソース ファイルの検索

よりシンプルなコマンドを使用

一般に、プロジェクトのソースは 1 か所にある可能性が高く、おそらく 2 ~ 3 個の深さでネストされたいくつかのサブディレクトリにあるため、

などの (おそらく) より高速なコマンドを使用できます。
(cd /path/to/project; ls *.c */*.c */*/*.c)

プロジェクト メタデータを利用する

C プロジェクトでは、通常、Makefile があります。他のプロジェクトでは、似たようなものがあるかもしれません。これらは、ファイル (およびその場所) のリストを抽出するための高速な方法であり、この情報を利用してファイルを検索するスクリプトを記述します。 grep variable $(sources programname) のようなコマンドを記述できるように、「sources」スクリプトがあります。 .

検索の高速化

find / … ではなく、より少ない場所を検索します find /path/to/project … を使用 可能であれば。選択基準をできるだけ単純化します。より効率的な場合は、パイプラインを使用して一部の選択基準を延期します。

また、検索の深さを制限することもできます。私にとって、これは「検索」の速度を大幅に向上させます。 -maxdepth スイッチを使用できます。たとえば、'-maxdepth 5'

検索の高速化

関心のある場所のインデックスが作成されていることを確認してください。man ページを読んで、タスクに適したオプションを利用してください。

   -U <dir>
          Create slocate database starting at path <dir>.

   -d <path>
          --database=<path> Specifies the path of databases to search  in.


   -l <level>
          Security  level.   0  turns  security checks off. This will make
          searchs faster.   1  turns  security  checks  on.  This  is  the
          default.

探す必要をなくす

何かがどこにあるのか忘れてしまったり、言われなかったりして、探しているのかもしれません。前者の場合はメモ(文書)を書き、後者の場合は質問しますか?慣習、標準、一貫性は大いに役立ちます。


RedGrittyBrickの回答の「検索の高速化」部分を使用しました。小さいデータベースを作成しました:

updatedb -o /home/benhsu/ben.db -U /home/benhsu/ -e "uninteresting/directory1 uninteresting/directory2"

locate を指す で:locate -d /home/benhsu/ben.db


私が使用する戦術は、 -maxdepth を適用することです find のオプション :

find -maxdepth 1 -iname "*target*"

探しているものが見つかるか、探すのに飽きるまで、深さを増やしながら繰り返します。最初の数回の反復はすぐに戻る可能性があります。

これにより、探しているものが階層のベース近くにある可能性が高い場合に、大規模なサブツリーの深さを調べて前もって時間を無駄にすることがなくなります。

このプロセスを自動化するスクリプトの例を次に示します (必要なものが表示されたら、Ctrl-C キーを押します):

(
TARGET="*target*"
for i in $(seq 1 9) ; do
   echo "=== search depth: $i"
   find -mindepth $i -maxdepth $i -iname "$TARGET"
done
echo "=== search depth: 10+"
find -mindepth 10 -iname $TARGET
)

関連する固有の冗長性 (各パスは前のパスで処理されたフォルダーをトラバースする必要があります) は、ディスク キャッシュによって大幅に最適化されることに注意してください。

find ではない理由 この検索順序を組み込み機能として持っていますか?おそらく、冗長なトラバーサルが受け入れられないと想定した場合、実装が複雑/不可能になるためです。 -depthの存在 オプションはその可能性を示唆していますが、残念ながら...


Linux
  1. Linuxでファイルを見つける方法

  2. 重複するファイル名の大文字と小文字を区別しない検索?

  3. サイズと拡張子でファイルを検索する方法は?

  1. Command Grepを使用して検索しますか?

  2. Linuxのlocateコマンドとfindコマンドの違いは何ですか

  3. ディレクトリを見つけて名前を変更する

  1. 複雑な検索のためにfindとgrepを組み合わせる方法は? (GNU/linux、find、grep)

  2. Linux での「検索」と「検索」の違いは何ですか?

  3. 名前と部分パスでファイルを検索するにはどうすればよいですか?