![gunzip 多个文件并并行连接吗?](https://linux22.com/image/1309925/gunzip%20%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%E5%B9%B6%E5%B9%B6%E8%A1%8C%E8%BF%9E%E6%8E%A5%E5%90%97%EF%BC%9F.png)
是否可以对多个文件进行 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
)。由于您不知道解压缩的大小(不先解压缩各个部分),所以这将不起作用。