如果不可读,则搜索内容和打印错误

时间:2017-01-06 19:11:26

标签: bash shell

我无法弄清楚如何解决这个问题。我有一个功能,我发送一个目录和一个单词。我想搜索该目录中包含该单词的所有文件,但如果我无法读取它们,我想打印自己的错误。这就是我所拥有的:

find $1 -type f -print0 | xargs -0 grep "$2" || error 3 "You can not read the archive."

其中:

  • $ 1 - >目录
  • $ 2 - >要搜索的字词。

它可以工作,但关键是如果我找到一个不可读的文件,我得到了grep错误,我不希望它出现。你知道我能做些什么来解决这个问题吗?

提前谢谢。

编辑:好的,如果我使用它:

result=$(find $1 -type f -print0 | xargs -0 grep -s "$2" || error 3 "You can not read the archive.")

它只保存错误一次,如果我想为每个存档打印一次错误,我该怎么办?

1 个答案:

答案 0 :(得分:1)

在这种情况下,我会想到两个选项:

1)将stderr重定向到/dev/null/dev/null作为空设备,"丢弃"发送给它的任何输入),例如:

grep "$2" 2> /dev/null

2)如果您使用GNU grep,那么选项grep -s将适用于您,例如:

grep -s "$2"

来自grep手册:

  

-s, - no-messages       禁止有关不存在或不可读文件的错误消息。可移植性说明:与GNU grep不同,第7版Unix grep没有   符合POSIX,因为它缺少-q和它的-s选项表现得像   GNU grep' s -q选项。 USG风格的grep也缺少-q但是-s选项   表现得像GNU grep。便携式shell脚本应该避免使用-q和   -s并应将标准和错误输出重定向到/ dev / null。 (-s由POSIX指定。)