1

所以,我有以下情况:

产生大量(必须压缩)输出集的代码如下:

line00
line01
...
line0N
.
line10
line11
...
line1M
.
...

我生成此内容并将其压缩:

./my_cmd | gzip -9 > output.gz

我想做的是,在伪代码中:

./my_cmd \
| csplit --prefix=foo '/^\.$/+1' {*} \  # <-- this will just create files
| tar -zf ??? \                 # <-- don't know how to link files to tar
| gzip -9 > output.tar.gz

理想情况下,硬盘驱动器上不会有任何解压文件。

总而言之:我的目标是在硬盘驱动器的分隔符处以压缩状态拆分一组文件,无需中间读写步骤。

如果我不能用 tar/gzip/csplit 做到这一点,那么也许还有别的东西?

4

1 回答 1

2

Tar 可以自己处理压缩。

./my_cmd | csplit --prefix=foo - '/^\.$/+1' {*} ; # writes foo?? files 

printf "%s\n" foo[0-9][0-9] | tar czf output.tar.gz -T -
rm -f foo[0-9][0-9]  # clean up the temps     

如果这还不够好,而你真的需要-9压缩,

printf "%s\n" foo[0-9][0-9] | 
    tar cOT -               |
    gzip -9 > output.tar.gz

然后,您应该能够从存档中提取单个文件以单独处理。

tar xvOf tst.tgz foo00 | wc -l

这使您可以保持文件压缩,但在不将它们写入磁盘的情况下提取块进行处理。

于 2019-01-04T21:41:14.563 回答