Подтвердить что ты не робот

Gzip со всеми ядрами

У меня есть набор серверов, заполненных каждой с кучей файлов, которые могут быть gzipped. На всех серверах разное количество ядер. Как я могу написать bash script для запуска gzip для каждого ядра и убедиться, что gzips не архивируют один и тот же файл?

4b9b3361

Ответ 1

Если вы работаете в 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

Существует реализация gzip, которая многопоточна, pigz. Поскольку он сжимает один файл на нескольких потоках, он должен иметь возможность читать с диска более эффективно, по сравнению с одновременным сжатием нескольких файлов.

Ответ 3

Возможно, вы захотите проверить GNU parallel. Я также нашел этот видео на youtube, который, похоже, делает то, что вы ищете.