Gzip 与所有核心

问题描述 投票:0回答:4

我有一组服务器,每个服务器都装有一堆可以压缩的文件。 这些服务器都有不同数量的核心。 如何编写 bash 脚本来为每个核心启动 gzip 并确保 gzip 不会压缩同一文件?

linux bash gzip
4个回答
99
投票

gzip 有一个多线程的实现,pigz。由于它是在多个线程上压缩一个文件,因此与一次压缩多个文件相比,它应该能够更有效地从磁盘读取数据。


71
投票

如果您使用的是 Linux,则可以使用 GNU 的 xargs 来启动与您拥有的内核一样多的进程。

CORES=$(grep -c '^processor' /proc/cpuinfo)
find /source -type f -print0 | xargs -0 -n 1 -P $CORES gzip -9
  • find -print0 / xargs -0 保护您免受文件名中的空格影响
  • xargs -n 1 表示每个文件一个 gzip 进程
  • xargs -P 指定作业数量
  • gzip -9 表示最大压缩

7
投票

您可能需要考虑检查GNU并行。我还在 youtube 上找到了这个视频,它似乎可以满足您的需求。


0
投票

14 年过去了,多核处理器无论如何都不再罕见。 我在这里寻找更新版本或改进的 gzip,它将使用多个核心来压缩单个文件,但会向其他人提到

zstd -T0 -19 filename
将准确地做到这一点,“智能地”使用可用的最大核心来完成任务。 我意识到这不是 gzip,但又不是
pigz
,所以我觉得有理由建议一个不是 gzip 的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.