我有一组服务器,每个服务器都装有一堆可以压缩的文件。 这些服务器都有不同数量的核心。 如何编写 bash 脚本来为每个核心启动 gzip 并确保 gzip 不会压缩同一文件?
gzip 有一个多线程的实现,pigz。由于它是在多个线程上压缩一个文件,因此与一次压缩多个文件相比,它应该能够更有效地从磁盘读取数据。
如果您使用的是 Linux,则可以使用 GNU 的 xargs 来启动与您拥有的内核一样多的进程。
CORES=$(grep -c '^processor' /proc/cpuinfo)
find /source -type f -print0 | xargs -0 -n 1 -P $CORES gzip -9
14 年过去了,多核处理器无论如何都不再罕见。 我在这里寻找更新版本或改进的 gzip,它将使用多个核心来压缩单个文件,但会向其他人提到
zstd -T0 -19 filename
将准确地做到这一点,“智能地”使用可用的最大核心来完成任务。 我意识到这不是 gzip,但又不是 pigz
,所以我觉得有理由建议一个不是 gzip 的解决方案。