拆分gzip压缩日志文件而不将未压缩的拆分存储在磁盘上

Nie*_*jes 11 linux gzip split text-files

我有一个经常性的任务,即将一组大的(每个大约1-2 GiB)gzip压缩的Apache日志文件拆分成几个部分(比如说500K行的块).应该再次压缩最终文件以限制磁盘使用量.

在Linux上我通常会这样做:

zcat biglogfile.gz | split -l500000
Run Code Online (Sandbox Code Playgroud)

生成的文件文件将命名为xaa,xab,xac等.所以我这样做:

gzip x*
Run Code Online (Sandbox Code Playgroud)

这种方法的效果是,作为中间结果,这些巨大的文件暂时存储在磁盘上.有没有办法避免这种中间磁盘使用?

我可以(以类似于xargs的方式)通过命令(如gzip)拆分输出并在运行中重新压缩输出吗?或者我是在寻找错误的方向,是否有更好的方法来做到这一点?

谢谢.

jim*_*ont 21

您可以使用slpit --filter选项,如解释手动

zcat biglogfile.gz | split -l500000 --filter='gzip > $FILE.gz'
Run Code Online (Sandbox Code Playgroud)

编辑:不知道什么时候split --filter引入选项但根据评论,它不起作用--filter.

  • 非常好,但请注意,coreutils 8.4的拆分没有"过滤器"argumnet (2认同)