プロジェクト内のソース ファイルの検索
よりシンプルなコマンドを使用
一般に、プロジェクトのソースは 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
の存在 オプションはその可能性を示唆していますが、残念ながら...