У меня есть набор серверов, заполненных каждой с кучей файлов, которые могут быть gzipped. На всех серверах разное количество ядер. Как я могу написать bash script для запуска gzip для каждого ядра и убедиться, что gzips не архивируют один и тот же файл?
Gzip со всеми ядрами
Ответ 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, который, похоже, делает то, что вы ищете.