5

ファイルのディレクトリで特定のパターンを探し、結果が表示されている間に特定のパターンを除外したいと考えています。

次のコマンドを使用します

find . -type f -exec grep -il 'foo' {} \; | find . -not -name "*.jar" -not -name "*.gz" -not -name "*.log" 2>/dev/null

結果が表示されると、次のエラー メッセージが表示されます

find: grep terminated by signal 13

このエラーメッセージが表示される理由と、目的の結果を得るために使用するより良いコマンドがあるかどうか (基本的に、結果セットから jar ファイル、ログファイル、またはその他の種類のファイルを除外する) を教えてください。

4

3 に答える 3

11

そのパイプラインの後半のfindように使用しようとしていると思います。そのようには機能しません。あなたがすべきことは、すべてを1つのコマンドにまとめることです:grepfind

find . -type f -not -name "*.jar" -not -name "*.gz" -not -name "*.log" -exec grep -il 'foo' {} + 2>/dev/null

または

find . -type f -not -name "*.jar" -not -name "*.gz" -not -name "*.log" -exec grep -qi 'foo' {} \; -print 2>/dev/null

またはgrep、ツリー自体をトラバースし、後で名前をフィルタリングします (grepではなくを使用find):

grep -irl foo . | grep -v -e '\.jar$' -e '\.gz$' -e '\.log$'
于 2013-08-26T15:10:12.987 に答える
1
find . | grep -v "jar$" | grep -v "log$" | grep -v "gz$"
于 2013-08-26T15:09:32.307 に答える