Если вы работаете в 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 означает максимальное сжатие