cspilt 后将管道输出压缩 tar
Pipe output to zipped tar after cspilt
所以,我有以下情况:
生成大量(必须压缩)输出的代码如下:
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
理想情况下,没有解压缩的东西会进入硬盘。
综上所述:我的objective是一组在硬盘驱动器上以分隔符分割的压缩状态的文件,没有中间的读写步骤。
如果我不能用 tar/gzip/csplit 做到这一点,那么也许还有别的办法?
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
这让您可以保持文件的压缩状态,但无需将它们写入磁盘即可提取块进行处理。
所以,我有以下情况:
生成大量(必须压缩)输出的代码如下:
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
理想情况下,没有解压缩的东西会进入硬盘。
综上所述:我的objective是一组在硬盘驱动器上以分隔符分割的压缩状态的文件,没有中间的读写步骤。
如果我不能用 tar/gzip/csplit 做到这一点,那么也许还有别的办法?
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
这让您可以保持文件的压缩状态,但无需将它们写入磁盘即可提取块进行处理。