2013-03-28 15 views
5

teeは標準入力から読み取り、標準出力とファイルに書き込みます。teeを圧縮ファイル

teeが圧縮ファイルに書き込むことは可能ですか?

some_command |& tee -some_option log.bz2 

teeできない場合は、他のコマンドはありますか?

私は

some_command |& bzip2 > log.bz2 

で圧縮されたファイルに出力をリダイレクトすることができます。しかし、このコマンドを使用して、標準出力に出力が不足しています。

答えて

4

あなたがstderrにあなたの出力を有するOKであれば、あなたはそれをリダイレクトすることができます

some_command | tee /dev/stderr | bzip2 > log.bz2 

これは、stdoutとstderr(| tee /dev/stderr)の両方に出力をティー。その後、bzip2のにもパイプSTDOUT(| bzip2 > log.bz2

+0

最後の '2>&1'は、' bzip2'によって生成されたエラーメッセージが出力ファイル 'log.bz2'に書き込まれることを意味します。単にそのリダイレクトを削除すれば、すべての言及とビジネスにつながります。 –

+0

うーん、よかった。 – craig65535

4

あなたのシェルがbash(バージョン4.x)である場合、あなたは'process substitution'を持っている、とあなたが使用できます。

some_command 2>&1 | tee >(bzip2 -c > log.bz2) 

これはに標準エラーと標準出力をリダイレクトtee|&と同じですが、私は古典的な表記を好む)。 teeの出力は、ファイルではなくプロセスに送られます。プロセスはbzip2 -c > log.bz2であり、その標準入力を圧縮形式で標準出力に書き出します。出力の他の(非圧縮の)コピーはもちろん、標準出力に直接送られます。

関連する問題