私は 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 {} +