gunzip 多个文件并并行连接吗?

gunzip 多个文件并并行连接吗?

是否可以对多个文件进行 gunzip 压缩,并将它们连接成一个大文件,但在多核机器上并行执行?例如,现在我这样做:

gunzip -c file1.gz > final
gunzip -c file2.gz >> final
gunzip -c file3.gz >> final
gunzip -c file4.gz >> final

我可以做同样的事情,以便在多核机器的不同 CPU 中对不同的文件进行 gunzip 处理,然后将它们全部连接到同一个最终文件中吗?

答案1

使用 GNU Parallel 来做这件事会更短一些:

parallel gunzip -c ::: file*.gz > final

但本质上它也会写入临时文件。

观看介绍视频以了解更多信息:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

答案2

您必须为此使用临时文件:

gunzip -c file1.gz > final &
one=$!
gunzip -c file2.gz > final2 &
two=$!
gunzip -c file3.gz > final3 &
three=$!
gunzip -c file4.gz > final4 &
four=$!

wait $one && wait $two && wait $three && wait $four
cat final2 >> final
cat final3 >> final
cat final4 >> final

要将一个较大文件的各个部分解压缩为一个最终文件,您必须知道各部分的解压缩大小。只有这样,您才能创建一个大的空文件,并将解压缩的输出写入大文件中的正确位置(例如dd)。由于您不知道解压缩的大小(不先解压缩各个部分),所以这将不起作用。

相关内容