作業中の各コードベースに対して異なるフラグセットを自動的に生成する方法があるかどうか疑問に思います--exclude-dir
。grep
あるプロジェクトではディレクトリで検索したくないし、別のプロジェクトではディレクトリで検索output/
したくないからです。checkpoints/
ソースコード以外のコードを含むフォルダがコードベースにあることが多いため、常に手動で入力する必要があります(例grep --exclude_dir {onedir, twodir, threedir} ...
:)。
--exclude-dir
理想的には、私が属しているコードベースに対してgrepがコマンドラインから呼び出すたびに、grep
オプションを自動補完する項目を確認できるファイルがあります。これにより、毎回除外するために長いディレクトリ名のリストを入力する必要がなくなります。ディレクトリ名は、現在作業しているプロジェクトによって異なります。
既存の項目から読むことができれば大丈夫です.gitignore
。
答え1
使用することをお勧めしますリップグレップ変えるgrep
。多くの利点の1つ
デフォルトでは、ripgrepはgitignoreルールを尊重し、隠しファイル/ディレクトリとバイナリを自動的にスキップします。
.gitignore
したがって、現在のディレクトリのファイルだけでなく、.gitignore
gitで使用されているグローバルファイルも尊重します。
デフォルトでは、すべての自動フィルタリングを無効にするには、次のようにします。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
#
EXCLUDE
grep
スクリプトを実行するには、コードをファイルに保存し、 を使用して実行可能にし、 を使用して呼び出して、その後mygrep
に提供するオプションとクエリを入力します。chmod +x /path/to/mygrep
/path/to/mygrep
grep
答え3
--exclude-from=FILE
この旗はまさにあなたが探しているようです。FILE
プロジェクトごとに項目を手動で作成し、次の項目で入力する必要があります。
onedir/*
twodir/*
grep
便宜上、実行時にフラグが自動的に呼び出されるようにシェルエイリアスを作成することもできます--exclude-from=FILE
。