grep再帰検索からそのディレクトリパスで指定されたネストされたサブディレクトリを除外する方法はありますか?

grep再帰検索からそのディレクトリパスで指定されたネストされたサブディレクトリを除外する方法はありますか?

ackそれともこれを使用するかfind達成する必要がありますか?

これが私が望むものです。次のディレクトリ構造があるとします。

dir/nesteddir/match.txt
otherdir/nesteddir/match.txt

最初の入れ子になったディレクトリのみを除外する方法は? grepを使うことも可能ですか?最も明確な答えは$ grep -r --exclude-dir="dir/nesteddir" "stringToFind" .うまくいかないようですが、--exclude-dirglobbing、Leadingなどを使用する./さまざまなパスの私の実験も行われません。

マニュアルページを読んでインターネット検索をしても役に立ちませんでした。私が見つけたこのユースケースへの唯一の言及は、次の質問でした。grep --exclude-dir アクション: バグまたは機能?

結論はgrep 2.12で紹介されたバグということですが、私は最新バージョン(2.16)とgrepのバグトラッカー(https://debbugs.gnu.org/cgi/pkgreport.cgi?package=grep)には、それに関連する内容はまったく言及されていないため、修正または--exclude-dir予想される動作であると推測されます。

少し説明を得るのは本当に良いでしょう。

ベストアンサー1

引数は、--exclude-dirディレクトリのベース名(つまり、親の親ディレクトリがない部分)と一致するパターンです。たとえば、および(およびそのサブディレクトリ)を--exclude-dir=nesteddir除外します。dir/nesteddirotherdir/nesteddir

GNU grepだけを使用して同じ名前の別のディレクトリを除外せずに1つのディレクトリを除外する方法はありません。ファイルを選択するには、GNU findなどのより洗練された方法を使用する必要があります。

find dir -path dir/nesteddir -prune -o -type f -exec grep -H 'pattern' {} +

おすすめ記事