2

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

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

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

2 ответа2

4

Это немного короче сделать это с помощью GNU Parallel:

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

но по существу это также пишет во временные файлы.

Посмотрите интровидео, чтобы узнать больше: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

1

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

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 ). так как вы не знаете распакованный размер (без предварительного распаковывания деталей), это не сработает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .