Ubuntu grep、find など: 「権限が拒否されました」および「そのようなファイルまたはディレクトリはありません」という出力

Ubuntu grep、find など: 「権限が拒否されました」および「そのようなファイルまたはディレクトリはありません」という出力

grepまたは を使用するとfind、次のような「アクセスが拒否されました」や「そのようなファイルまたはディレクトリはありません」という通知が表示されていつもイライラします。

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

これらを回避して、関連データ、つまり本当に探しているデータだけが表示されるようにするにはどうすればよいでしょうか?

答え1

grepでは、-sフラグを指定できます。これは@ortangが言ったこととほぼ同じです。

-s, --メッセージなし 存在しないファイルや読み取り不可能なファイルに関するエラー メッセージを抑制します。移植性に関する注意: 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

答え2

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

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

答え3

リダイレクトstrerr/dev/null(別名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

答え4

grep -vの前に「|&」を使用すると、これを処理できます。例:

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'

関連情報