特定のパッケージのインストールディレクトリを見つけようとしています。特定のファイルを見つけようとしている特定のキーワードがあります。
Grepでは、cppまたはhファイルタイプのみを含めます。 grepにwarnings likePermission DeniedまたはCould not findを表示させたくないディレクトリ。一致したファイルのみを表示したいだけです。どうすればこれを行うことができますか?
現在、私は使用しています
grep "My term" -ir --exclude-dir="\.svn" --include=*.{cpp,h} ./
これらの警告は、標準出力ファイル記述子ではなく、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を使用するたびに、これらのメッセージが自動的に抑制されます。
別のオプションは、--no-messages
フラグ、短縮形-s
です。これはIs a directory
メッセージも削除しますが、より有用な他のメッセージも抑制します。たとえば、*/*/*
でネストされた検索を実行していて、そのパターンのそのようなファイルが存在しない場合、それは通知されません。
-ir
を使用してgrep
を再帰的に実行する代わりに、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