Gunzip несколько файлов и объединить параллельно?

1538
719016

Можно ли сжать несколько файлов и объединить их в один большой файл, но делать это параллельно на многоядерной машине? Например, сейчас я делаю:

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

Могу ли я сделать то же самое, чтобы обработка разрозненных файлов различными файлами выполнялась в разных процессорах на многоядерном компьютере, и все они были объединены в один и тот же конечный файл?

2
Вы уверены, что ограничивает скорость процессора, а не диска? Daniel Andersson 11 лет назад 0

2 ответа на вопрос

4
Ole Tange

It is a little shorter to do that using GNU Parallel:

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

but essentially it also writes to temporary files.

Watch the introvideos to learn more: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

1
akira

Вы должны использовать временные файлы для этого:

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 

чтобы распаковать части большего файла в один конечный файл, вам необходимо знать распакованный размер частей. только тогда вы можете создать biiiig пустой файл и записать вывод декомпрессии в правильную позицию в большом файле ( ddнапример, с). так как вы не знаете распакованный размер (без предварительного распаковывания деталей), это не сработает.