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
それらをどのように回避して、関連データ、つまり私が本当に探しているものだけを表示できるようにすることができますか?
grepを使用すると、@ ortangが言ったことをほぼ行う-sフラグを指定できます
-s、--no-messages存在しない、または読み取り不可能なファイルに関するエラーメッセージを抑制します。移植性に関する注意:GNU grepとは異なり、第7版Unix grepはPOSIXに準拠していませんでした。-qがなく、-sオプションがGNU grep's- qオプション。USGスタイルのgrepにも-qがありませんでしたが、-sオプションはGNU grepのように動作しました。ポータブルシェルスクリプトは-qと-sの両方を回避し、標準出力とエラー出力を/にリダイレクトする必要があります。代わりにdev/null。
私が知る限り、@ ortangsでの検索が最善です。何かのようなもの
find / -name "myfile" -type f -print 2>/dev/null
strerr
を/dev/null
(a.k.a black hole
)にリダイレクトすることは、権限拒否エラーを抑制する良い方法です。
ただし、この傷はpermission denied
メッセージだけでなく[〜#〜] all [〜#〜]エラーメッセージも抑制することに注意してください。
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
johndoe@johndoe-desktop:/$ Sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn
Sudo
コマンドを使用して、コマンドを昇格させ、管理者特権を付与します。
Grep -vの前に「|&」を使用すると、それが処理されます。
grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'