各プロジェクトのカスタム grep 除外ディレクトリ

各プロジェクトのカスタム grep 除外ディレクトリ

作業中の各コードベースに対して異なるフラグセットを自動的に生成する方法があるかどうか疑問に思います--exclude-dirgrep

あるプロジェクトではディレクトリで検索したくないし、別のプロジェクトではディレクトリで検索output/したくないからです。checkpoints/ソースコード以外のコードを含むフォルダがコードベースにあることが多いため、常に手動で入力する必要があります(例grep --exclude_dir {onedir, twodir, threedir} ...:)。

--exclude-dir理想的には、私が属しているコードベースに対してgrepがコマンドラインから呼び出すたびに、grepオプションを自動補完する項目を確認できるファイルがあります。これにより、毎回除外するために長いディレクトリ名のリストを入力する必要がなくなります。ディレクトリ名は、現在作業しているプロジェクトによって異なります。

既存の項目から読むことができれば大丈夫です.gitignore

答え1

使用することをお勧めしますリップグレップ変えるgrep。多くの利点の1つ

デフォルトでは、ripgrepはgitignoreルールを尊重し、隠しファイル/ディレクトリとバイナリを自動的にスキップします。

.gitignoreしたがって、現在のディレクトリのファイルだけでなく、.gitignoregitで使用されているグローバルファイルも尊重します。

デフォルトでは、すべての自動フィルタリングを無効にするには、次のようにします。rg -uuu

答え2

次のスクリプトは私のために働いた

#!/bin/bash

if [ -r .grepignore ]; then
    while read -r line; do
        if [[ "$line" =~ '#' ]] || [[ "$line" =~ ^$ ]]; then
            continue
        fi
        EXCLUDE="$EXCLUDE --exclude-dir=\"$line\""
    done < .grepignore
fi

eval grep -r "$EXCLUDE" '"$@"'

このスクリプトは、ファイルが.grepignore存在し、読み取り可能であることを確認します。その場合は、EXCLUDEファイル内のすべての行に対して(先行スペースと末尾の空白なし)を含む文字列を生成します。ただし、空でない場合、またはを含めると、スクリプトはその文字列を渡し、指定されたパラメータをスクリプトに追加します。--exclude-dir="$line"$line#EXCLUDEgrep

スクリプトを実行するには、コードをファイルに保存し、 を使用して実行可能にし、 を使用して呼び出して、その後mygrepに提供するオプションとクエリを入力します。chmod +x /path/to/mygrep/path/to/mygrepgrep

答え3

--exclude-from=FILEこの旗はまさにあなたが探しているようです。FILEプロジェクトごとに項目を手動で作成し、次の項目で入力する必要があります。

onedir/*
twodir/*

grep便宜上、実行時にフラグが自動的に呼び出されるようにシェルエイリアスを作成することもできます--exclude-from=FILE

関連情報