GNU parallel является утилитой командной строки для GNU/Linux и других Unix-подобных операционных систем, которая позволяет выполнять shell-скрипты параллельно. GNU parallel - это свободное программное обеспечение, написанное Оле Танге на языке Perl. Программа доступна в соответствии с условиями лицензии GPLv3.

Использование

Чаще всего используется для замены циклов, например for x in `cat list` ; do do_something "$x" done | process_outputна cat list | parallel do_something | process_outputгде файл с именем list содержит аргументы для do_something и где process_output может быть пустым.

Скрипты использующие parallel часто легче читать, чем скрипты, использующие pexec.

Parallel включает также группировка стандартного вывода и стандартного потока ошибок, чтобы вывод параллельно запущенных задач не работает вместе; сохраняет порядок вывода, оставляя тот же самый порядок как на вводе; корректная работа с именами файлов, содержащих специальные символы, такие как пробел, одиночная кавычка, кавычки, амперсанд и кодировку UTF-8; По умолчанию, параллельно запускается столько же задач, сколько и ядер процессора.

Примеры find . -name "*.foo" | parallel grep barЭквивалентно: find . -name "*.foo" -exec grep bar {} +Это поиск во всех файлах в текущем каталоге и его подкаталогах, чье имя заканчивается на .foo и содержит строку bar. Parallel будет работать не так, как ожидается, если имя файла содержит символ новой строки. Для того чтобы избежать этого ограничения можно использовать: find . -name "*.foo" -print0 | parallel -0 grep barКоманда выше использует нулевой символ для разделения имен файлов. find . -name "*.foo" | parallel -X mv {} /tmp/trashЭта команда использует {} , чтобы сказать parallel , что нужно заменить {} списком аргументов. find . -maxdepth 1 -type f -name "*.ogg" | parallel -X -r cp -v -p {} /home/mediaПриведенная выше команда делает то же, что: cp -v -p *.ogg /home/mediaоднако первая команда, которая использует find/parallel/cp является более эффективной в использовании ресурсов и не остановится с ошибкой, если раскрытие *.ogg будет слишком большим для shell.

См. также xargs pexec GNU Queue

Примечания

Ссылки Страница проекта и руководство GNU parallel

Категория:Свободное программное обеспечение, написанное на Perl Категория:Программное обеспечение проекта GNU