2017-10-20 135 views
2

在bash中使用unzip命令时,会在终端中创建大量输出。某些输出可以通过使用-q选项或-qq(“= even even” - UNZIP MAN)来抑制。然而,总是这个过程的结束,我仍然收到一条消息,如10 archives were successfully processed(并且在它之前有一个空行)。如何避免解压缩“已成功处理归档”。输出

看起来这消息是来自STDERR,因为当我输出STDOUT到文件等

unzip -qq files2zip.zip 1> stdoutput.txt 

它仍然被输出到终端而不是文件。当我输出STDERR(即2> stderror.txt)到一个文件时,它会输出到文件。

在我的脚本中,我想让错误显示在屏幕上,但我不希望显示此消息。那么是否有任何方法可以在不丢失错误输出的情况下抑制此消息(我不想将stderr输出到文件中)?

+0

unzip'你有什么版本的'?在Ubuntu发行版中,无论是* Debian * UnZip 6.00还是* Red Hat上的Info-ZIP * UnZip 6.00都打印此消息。 –

+0

'man unzip'告诉我它是v6.0。我在Ubuntu上,我想我只是使用apt-get来安装它(如果我没有记错的话)。 –

回答

1

您可以使用PROC子

unzip -qq files2zip.zip 2> >(grep -v "were successfully processed") 
+0

谢谢,这的确有诀窍。我尝试了类似的东西,但没有得到正确的管道。那么第二个'''是什么?有没有办法使用grep摆脱消息上方的空行? –

+0

@LuKas'2>'打开后面的STDOUT文件描述符,'>()'允许将这个数据流发送到一个进程,就像它是一个文件一样。参见[这里](https://www.gnu.org/software/bash/manual/html_node/Process-Substitution.html)。 – 123

0

除标准错误和标准输出外,没有第三个输出。因此,您可以做的最好的事情就是过滤来自stderr的不需要的消息,以及上一行。请注意,这假定特别结构化的解压缩输出,这可能很容易中断。事情是这样的:

unzip file.zip 2> >(head --lines=-2) 
+0

但我确实希望在终端中显示(实际)错误。 –