我在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>
,但这也没有用。有人能帮助我吗?
谢谢!
答案 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