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'