grepを使用してネストされたディレクトリを除外する

grepを使用してネストされたディレクトリを除外する

grep検索から入れ子になったディレクトリを除外したいと思います/path/to/file。例:

jake@jake-laptop:~/test$ egrep -r --exclude-dir="path" "hello" .
jake@jake-laptop:~/test$ egrep -r --exclude-dir="to" "hello" .
jake@jake-laptop:~/test$ egrep -r --exclude-dir="file" "hello" .
jake@jake-laptop:~/test$ egrep -r --exclude-dir="path/to/file" "hello" .
./path/to/file/f.txt:hello

最後の行では、そのファイルは除外されません。これは、パラメータに付属のネストされたディレクトリが複数あるためですexclude-dirpath/to/fileディレクトリ検索を除外する最後の例をどのように取得できますか?

ベストアンサー1

--exclude-dirパスのデフォルト名(つまり、現在のサブディレクトリ)とのみ比較するようです。したがって、 path/to/file は dir "file" と絶対に一致せず、--exclude-dir=fileglob バージョン (例えば--exclude-dir=*ile.

一般的な選択肢は、たとえばfindオプションを処理する場合を使用することです-path

find . -path ./path/to/file -prune -o -type f -exec egrep -l 'hello' {} +

その後のパターンは-path開始ディレクトリを含むパスと一致する必要がありますが、globを使用して単純化できます。たとえば、'*path*file*'*も/と一致します。

それ以外の場合に切り替えることができますfind | sed | xargs egrep

おすすめ記事