Многие задачи в Linux можно ускорить в разы, задействовав несколько ядер CPU.
Ключ — опция
-P у xargs, которая запускает несколько процессов одновременно (это именно многопроцессность, не потоки).Например, выполнить задачи параллельно:
P=$(nproc)
seq "$P" | xargs -P"$P" -I{} ./task.sh {}
Здесь одновременно работают до P копий скрипта (обычно по числу доступных CPU).
Отлично подходит для тяжёлых операций над файлами:
find . -maxdepth 1 -name "*.log" -print0 | xargs -0 -P4 -I{} gzip "{}"Файлы сжимаются параллельно, а не по одному. Использование
-print0 / -0 безопасно для имён с пробелами и спецсимволами.Можно комбинировать с
find для массовой обработки каталогов:find . -name "*.jpg" -print0 | xargs -0 -P6 -I{} convert "{}" -resize 50% "resized/{}"Вывод лучше писать в другой файл или каталог, чтобы не перезаписывать исходники.
🔥 Это простой способ распараллелить многие CPU-интенсивные задачи, но итоговая скорость может упираться в диск или другие ресурсы.
➡️ DevOps Ready | #совет
