如何在将程序输出写入压缩文件的同时在终端保留可读输出?
如何在将程序输出写入压缩文件的同时在终端保留可读输出?
这个需求真的太实用了!我之前处理海量日志输出的时候也碰到过一模一样的问题——既要实时看正常的输出内容,又不想让生成的日志文件占满磁盘空间。其实用tee配合进程替换就能轻松搞定,不用折腾复杂的工具链。
直接给你改好的命令,拿你举的例子来说:
python -c 'for i in range(0, 100): print("A" * 120)' | tee >(gzip --best > A.log.gz)
简单解释下原理:
tee的作用本来就是把输入同时复制到多个输出端,默认是终端+普通文件;>(...)是shell的进程替换语法,它会创建一个临时管道,把tee的其中一份输出传给括号里的gzip命令处理,压缩后写入A.log.gz;- 而
tee的另一份输出会直接流向你的终端,保持原始的可读格式,完全不会出现压缩后的乱码。
扩展小技巧:
- 如果想换用其他压缩工具(比如压缩率更高的
xz或者老牌的bzip2),直接替换gzip --best就行,比如:python -c 'for i in range(0, 100): print("A" * 120)' | tee >(xz -9 > A.log.xz) - 要是输出内容太多刷得太快,还可以配合
less分页查看,同时不影响压缩文件的生成:python -c 'for i in range(0, 100): print("A" * 120)' | tee >(gzip --best > A.log.gz) | less
这样运行之后,你既能实时看到所有的"A"字符串,又能得到体积小巧的压缩日志文件,完美兼顾了监控和存储需求~
备注:内容来源于stack exchange,提问作者FalcoGer
相关产品推荐
相关产品推荐

