1. ホーム
  2. linux

[解決済み] 標準エラー出力を /dev/null にリダイレクトする。

2022-03-14 13:58:26

質問

Unixサーバーで以下のコマンドを使用しています。

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

以降 grep -R は利用できないので、これを使わなければならない。 見つける / xargs の解決策になります。ファイルを開くことができないたびに grep はこう教えてくれる。

grep: "foo.txt" を開くことができません。

このメッセージを消したいので、標準エラー出力を /dev/null しかし、どういうわけか、これはうまくいきません。

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

stdoutを保持し(つまりコンソールに結果を書き込み)、これらのgrepエラーメッセージだけを隠したいのです。代わりに 2> また、試しに &> しかし、これもうまくいきません。どうすれば直るのでしょうか?

解決方法は?

を行うには リダイレクト stderr を /dev/null に送るようにします。

some_cmd 2>/dev/null

は必要ありません。 xargs を使用します。(単語分割を行うので、必要ない!)。

findのexecオプションを使用します。

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