Gzip包含所有内核

时间:2010-12-03 00:33:31

标签: linux bash gzip

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

3 个答案:

答案 0 :(得分:67)

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

答案 1 :(得分:58)

如果您使用的是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表示最大压缩

答案 2 :(得分:6)

您可能需要考虑检查GNU parallel。我还发现这个video on youtube似乎正在寻找你想要的东西。