将stderr重定向到/ dev / null

时间:2017-06-26 11:31:15

标签: linux grep

我在UNIX服务器上使用以下命令:

$count = 0;

while(! feof($file))

      {

          $entry = fgetcsv($file, 0, ';');

          if ($count > 0) {
          //skip first line, header


          }

      $count++;
}

由于grep -R不可用,我必须使用这个find / xargs解决方案。每次无法打开文件时,grep会告诉我这个

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

我想摆脱这条消息,所以我尝试将stderr重定向到grep: can't open "foo.txt" ,但不知怎的,这不起作用。

/dev/null

我想保留stdout(即将结果写入控制台),并且只隐藏这些grep错误消息。我还尝试find . -type f -name "*.txt" | xargs grep -li 'needle' 2>/dev/null 而不是2>,但这也没有用。有人能帮助我吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

为了redirect stderr to / dev / null使用:

some_cmd 2>/dev/null

你在这里不需要xargs。 (而且你不想要它!因为它执行分词)

使用find的exec选项:

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

要取消错误消息,请使用-s的{​​{1}}选项:

来自grep

  

-s, - no-messages                 禁止有关不存在或不可读文件的错误消息。

给你:

man grep

答案 1 :(得分:1)

只需将重定向移动到第一个命令,即

find ... 2>/dev/null | xargs ...

或者您可以将所有内容括在括号中:

(find ... | xargs ...) 2>/dev/null