我有一个经常性的任务,将一组大的(大约1-2 GiB)gzip压缩的Apache日志文件分成几部分(比如说50万行的块)。最终文件应再次压缩以限制磁盘使用量。
在Linux上,我通常会这样做:
zcat biglogfile.gz | split -l500000
生成的文件文件将被命名为xaa,xab,xac等,所以我这样做:
gzip x*
这种方法的效果是,作为中间结果,这些 大 文件被临时存储在磁盘上。有办法避免这种中间磁盘使用情况吗?
我可以(类似于xargs的方式)通过命令(例如gzip)分割输出的管道并即时重新压缩输出吗?还是我看错了方向,是否有更好的方法来做到这一点?
谢谢。
您可以按照手册中的split --filter说明使用该选项,例如
split --filter
zcat biglogfile.gz | split -l500000 --filter='gzip > $FILE.gz'
编辑:不知道何时--filter引入了option,但根据注释,它在中不起作用core utils 8.4。
--filter
core utils 8.4