Gzip包含所有内核

Use*_*er1 43 linux bash gzip

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

Dav*_*Yaw 72

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

  • 很高兴知道.不幸的是,pigz不在我们的服务器上.:( (2认同)

Dem*_*nex 61

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

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

  • 没有必要导出变量.你应该使用`$()`而不是反引号.没有必要使用`cat` - `grep`接受一个文件作为参数.GNU`grep`(如果不是其他人也可以)可以计算,所以你不需要`wc`.最终结果:`CORES = $(grep -c ^ processor/proc/cpuinfo)` (10认同)

Gan*_*har 6

您可能需要考虑检查GNU并行.我也在youtube上发现了这个视频,它似乎正在寻找你想要的东西.