在Linux中,如何将输入流压缩为多个输出文件?

我知道怎么做:

commandGeneratingLotsOfSTDOUT | bzip2 -z -c > compressed.bz2

我也知道怎么做:

commandGeneratingLotsOfSTDOUT | split -l 1000000

但我不知道该怎么做:

commandGeneratingLotsOfSTDOUT | split -l 1000000 -compressCommand "bzip2 -z -c"

如果上面的内容尚未100%清除,我正在运行一个生成TB或两个输出的命令.我希望将输出分成N行的块(在这种情况下为100万),并将每个块压缩为bzip2并存储在文件中.

现在我做的是:

commandGeneratingLotsOfSTDOUT | split -l 1000000
foreach fileGenerated { bzip2 -z thatFile }

这为每个文件添加了额外的磁盘写入和从磁盘读取(并再次写入磁盘,尽管已压缩)!由于文件都大于RAM,因此转换为实际的磁盘使用情况.

解决方法:

怎么样:

cmdWithLotsOfSTDOUT | split -l 1000000 --filter 'bzip2 > "$FILE.bz2"'

一个例子:

$ls
afile

$cat afile
one
two
three
four
five
six
seven
eight
nine
ten

$cat afile | split -l 2 --filter='bzip2 > "$FILE.bz2"'

$ls
afile  xaa.bz2  xab.bz2  xac.bz2  xad.bz2  xae.bz2

$bzip2 -dc xac.bz2
five
six

$
上一篇:如何在Java中正确实现LZ4,Snappy或等效压缩技术?


下一篇:javascript文本压缩/解压缩