GNU Parallel — это утилита командной строки для Linux и других Unix-подобных операционных систем, которая позволяет пользователю параллельно выполнять сценарии оболочки или команды . GNU Parallel — свободное программное обеспечение , написанное Оле Танге на Perl . Он доступен на условиях GPLv3 . [2]
Чаще всего используется для замены цикла оболочки, например
пока читаем x ; do do_something " $x " сделано < список
в форму
список кошек | параллельно сделать_что-то
где файл list
содержит аргументы do_something
и где process_output
может быть пустым.
Сценарии, использующие параллельный код, часто легче читать, чем сценарии, использующие pexec .
Параллельные функции программы также
По умолчанию параллельно выполняется столько заданий, сколько имеется ядер ЦП .
находить . -имя "*.foo" | параллельная строка grep
Вышеупомянутое является параллельным эквивалентом:
находить . -name "*.foo" -exec grep bar {} +
При этом выполняется поиск во всех файлах в текущем каталоге и его подкаталогах, имена которых заканчиваются .foo
на вхождения строки bar
. Команда Parallel будет работать должным образом, если имя файла не содержит символа новой строки . Чтобы обойти это ограничение, можно использовать:
находить . -имя "*.foo" -print0 | параллельно -0 строка grep
Приведенная выше команда использует нулевой символ для разделения имен файлов.
находить . -имя "*.foo" | параллельно -X mv {} /tmp/trash
Приведенная выше команда расширяется {}
, добавляя столько аргументов, сколько позволяет длина командной строки, при необходимости распределяя их равномерно между параллельными заданиями. Это может снизить накладные расходы на процесс для кратковременных команд, выполнение которых занимает меньше времени, чем запуск.
находить . -maxглубина 1 -тип f -имя "*.ogg" | параллельно -X -r cp -v -p {} /home/media
Команда выше делает то же самое, что и:
cp -v -p *.ogg /home/media
Однако первая команда, использующая find
/ parallel
/ cp
, более эффективно использует ресурсы и не остановится с ошибкой, если расширение *.ogg слишком велико для оболочки.