grepがデフォルトでfindコマンドの端末出力から行を削除しないのはなぜですか? [コピー]

grepがデフォルトでfindコマンドの端末出力から行を削除しないのはなぜですか? [コピー]

私はしばしば次の簡単なコマンドのためにイライラしています。

find / | fgrep somestuff.ext

使用しないと、sudo権限が拒否された行が引き続き表示されます。これは公平ですが、grepがパイプから読み取ったときにこの出力が無視されないのはなぜですか?

この形式の出力がパイプに渡されるのではなく、ターミナルウィンドウに直接送信され(これが起こったと思われる)、その後grepによって無視されるのはなぜですか? catによって同じ行が生成されますが(許可拒否メッセージが保存されていると仮定)text)ファイルはパイプに正しく入り、私のgrepパターンでは無視されますか?

STDIN / STDOUTプロセスに私が理解していないものがあるようです。

ベストアンサー1

許可拒否メッセージは、stdoutではなくfindstderrに送信されます。 stderr全体をビットバケットにリダイレクトできます。

find 2>/dev/null | fgrep somestuff.ext

また、特定のファイルを見つけるためにgrepは必要ありません。

find . -name somestuff.ext

それでも申請できます2>/dev/null

許可拒否メッセージのみを表示したくない場合は、次のものを使用できます。

2> >(grep -v 'Permission denied' >&2)

バッシュから。

おすすめ記事