2017-10-20 189 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

但我確實希望在終端中顯示(實際)錯誤。 –