ack
それともこれを使用するかfind
達成する必要がありますか?
これが私が望むものです。次のディレクトリ構造があるとします。
dir/nesteddir/match.txt
otherdir/nesteddir/match.txt
最初の入れ子になったディレクトリのみを除外する方法は? grepを使うことも可能ですか?最も明確な答えは$ grep -r --exclude-dir="dir/nesteddir" "stringToFind" .
うまくいかないようですが、--exclude-dir
globbing、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/nesteddir
otherdir/nesteddir
GNU grepだけを使用して同じ名前の別のディレクトリを除外せずに1つのディレクトリを除外する方法はありません。ファイルを選択するには、GNU findなどのより洗練された方法を使用する必要があります。
find dir -path dir/nesteddir -prune -o -type f -exec grep -H 'pattern' {} +