Ubuntu grep、findなど:「Permission denied」および「No such file or directory」の出力


17

grepまたはを使用findすると、「Permission denied」および「No such file or directory」という通知に常に悩まされます。次のようなものです。

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn
grep: ./lib/ufw/user6.rules: Permission denied
grep: ./lib/ufw/user.rules: Permission denied
grep: ./lib/init/rw/udev/watch/27: No such file or directory
grep: ./lib/init/rw/udev/watch/26: No such file or directory
grep: ./lib/init/rw/udev/watch/25: No such file or directory

どうすればそれらを避けて、関連するデータ、つまり私が本当に探しているものだけが見えるようにすることができますか?


回答:


24

grepを使用すると、@ ortangが言ったこととほとんど同じことを行う-sフラグを指定できます。

-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にリダイレクトする必要があります。

私が知る限り、@ ortangsの答えは最高です。何かのようなもの

find / -name "myfile" -type f -print 2>/dev/null


6

にリダイレクトstderrしてみてください/dev/null

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

5

strerrto /dev/null(aka black hole)をリダイレクトすることは、許可拒否エラーを抑制する良い方法です。

ただし、この傷はpermission deniedメッセージを抑制するだけでなく、すべてのエラーメッセージを抑制することに注意してください。

それ以外のエラーメッセージを保持したい場合はpermission denied、このようなことをすることができます-

grep -rnP 'YII_CORE_PATH' ./ 2>&1 | grep -v 'permission denied' > error.log

これらを保持したくない場合は、次の手順で問題ありません。

grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

1
既に/ dev / nullにリダイレクトされているものをgrepすることはできません。
チョロバ

@choroba答えを修正しました。最初の提案の2>&1代わりに書くことを意味します2> /dev/null
ジェイパルシン

はい、最初にリダイレクトstderrする必要がありますstout
オータン

3
johndoe@johndoe-desktop:/$ sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn

sudoコマンドを使用して、管理者特権を持つようにコマンドを昇格します。


0

grep -vの前に「|&」を使用すると、たとえば

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.