Gzip со всеми ядрами - PullRequest
       20

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

40 голосов
/ 03 декабря 2010

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

Ответы [ 3 ]

69 голосов
/ 03 декабря 2010

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

58 голосов
/ 03 декабря 2010

Если вы работаете в 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 означает максимальное сжатие
6 голосов
/ 03 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...