2つのパイプコマンドのstderrを/dev/nullにリダイレクトする: find | grep 質問する

2つのパイプコマンドのstderrを/dev/nullにリダイレクトする: find | grep 質問する

私は Unix サーバーで次のコマンドを使用しています:

find . -type f -name "*.txt" | xargs grep -li 'needle'

が利用できないのでgrep -R、これを使わなければなりません探す/xargs解決策。ファイルを開けないたびに、grep次のように表示されます。

grep: "foo.txt" を開けません

このメッセージを削除したいので、stderr を にリダイレクトしようとしました/dev/nullが、どういうわけか機能しません。

find . -type f -name "*.txt" | xargs grep -li 'needle' 2>/dev/null

stdout を保持し (つまり、結果をコンソールに書き込む)、これらの grep エラー メッセージのみを非表示にしたいです。 の代わりに2>も試しました&>が、これも機能しませんでした。どうすれば修正できますか?

ベストアンサー1

するためにリダイレクトstderr から /dev/null への使用:

some_cmd 2>/dev/null

ここでは必要ありませんxargs。(単語分割を実行するため、必要ありません。)

find の実行オプションを使用します:

find . -type f -name "*.txt" -exec grep -li needle {} +

エラー メッセージを抑制するには、-s次のオプションを使用しますgrep

からman grep

-s, --no-messages 存在しないファイルや読み取り不可能なファイルに関するエラー メッセージを抑制します。

これにより、次のようになります。

find . -type f -name "*.txt" -exec grep -lis needle {} +

おすすめ記事