回答:
これらの警告はstderr
、標準出力ファイル記述子ではなく、ストリームに向けられます。2>/dev/null
コマンドの最後に追加することにより、stderrの出力を停止できます。
警告をフィルタリングするよりも直接、以下を追加することで無効にできます-s
:
grep "My term" -sir --exclude-dir="\.svn" --include=*.{cpp,h} ./
このオプションにはいくつかの互換性の問題があります。ただし、これは個人的な使用では問題になりません。
-s、-no-messages:存在しない、または読み取り不能なファイルに関するエラーメッセージを抑制します。移植性に関する注意:GNU grepとは異なり、7th Edition Unix grepはPOSIXに準拠していませんでした。これは、-qがなく、-sオプションがGNU grepの-qオプションと同様に動作したためです。USGスタイルのgrepにも-qがありませんでしたが、その-sオプションはGNU grepのように動作しました。ポータブルシェルスクリプトは、-qと-sの両方を避け、代わりに標準出力とエラー出力を/ dev / nullにリダイレクトする必要があります。(-sはPOSIXで指定されます。)
私はこのような多くの迷惑なメッセージを取得していました。
grep: commands: Is a directory
grep: events: Is a directory
grep: views: Is a directory
理由は、--directories
フラグがデフォルトに設定されているからread
です。に変更しましたrecurse
。再帰的な検索を自動的に実行したくない場合は、skip
代わりに使用できます。
これを常に処理する最も簡単な方法は、環境変数に設定することです。中~/.bash_profile
または~/.bashrc
ご使用のディストリビューションに応じて:
export GREP_OPTIONS='--directories=recurse'
現在、grepを使用するたびに、これらのメッセージが自動的に抑制されます。
もう1つのオプションは、--no-messages
フラグshorthand -s
です。これによりIs a directory
メッセージも削除されますが、より便利な他のメッセージも抑制されます。たとえば、ネストされた検索を実行していて、*/*/*
そのパターンのそのようなファイルが存在しない場合、それはわかりません。
をgrep
再帰的に行う代わり-ir
に、find
コマンド(デフォルトでは再帰的)に-readable
フラグとパスでアクセス許可を処理させ、フラグで除外し-not -path "*.svn*"
てからファイルをに渡すという方法がありますgrep
。ディレクトリの除外は、-type f
通常のファイルのみを見つけるために行われます。
$ find . -not -path "*.svn*" -type f -name "*.cpp" -or -name "*.h" -readable -exec grep "my terms" "{}" \;
特定のファイルで再帰検索を実行する場合、を使用するほうがはるかに適切ack-grep
です。ここの構文は次のとおりです。
ack-grep -i "My term" --cpp --h
アクセス許可エラーメッセージを削除するには、次のコマンドを使用して同じコマンドを実行できますsudo
。
ack-grep -i "My term" --cpp --h
しかし、最終的に、インストール済みパッケージを検索する場合は、これらのさまざまなオプションを確認してください:https : //www.google.com/search?q=ubuntu%20search%20inside%20installed%20packages
find . 2>/dev/null | grep 404.html
は、コマンドがどのようになるかです