将tee输出保存到压缩文件中

8

tee从标准输入读取并写入标准输出和文件。

some_command |& tee log

tee命令是否可以将输出写入压缩文件?

some_command |& tee -some_option log.bz2

如果tee命令无法实现此功能,是否有其他命令可用?
我可以使用以下命令将输出重定向到压缩文件中:
some_command |& bzip2 > log.bz2

但是使用这个命令后,标准输出的内容会消失。
2个回答

14

如果你的shell是bash(版本4.x),你可以使用'进程替换',示例如下:

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

这样可以将标准错误和标准输出重定向到tee(像|&一样,但我更喜欢传统的符号)。tee的输出副本被发送到一个进程而不是文件;该进程是bzip2 -c > log.bz2,它在压缩格式下将其标准输入写入其标准输出。当然,另一个(未压缩的)输出副本直接输出到标准输出。


6
如果你不介意将输出放在stderr上,你可以重定向它:
some_command | tee /dev/stderr | bzip2 > log.bz2

这个命令同时将输出定向到标准输出和标准错误流(| tee /dev/stderr)。然后,它将标准输出流传递给bzip2 (| bzip2 > log.bz2)


这个问题与gzip相同:在系统崩溃的情况下,您将会得到一个空的输出日志文件“log.bz2”。 - xuancong84

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接