GNU parallel

Parallel

Тип |  Утилита
Автор |  Ole Tange[вд][5]
Разработчик |  Проект GNU
Написана на |  Perl
Операционная система  |  GNU
Первый выпуск |  6 января 2002[1][2]
Последняя версия |

* 20240322 (31 марта 2024)[3]

Тестовая версия |

* 20240522 (22 мая 2024)[4]

Репозиторий |  git.savannah.gnu.org/cgi…
Лицензия |  GPLv3
Сайт |  gnu.org/software/parallel/
Медиафайлы на Викискладе

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

## Содержание

* 1 Использование
* 2 Примеры
* 3 См. также
* 4 Примечания
* 5 Ссылки

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

[править | править код]

Вводное видео, Часть 1 Вводное видео, Часть 2

Чаще всего используется для замены циклов, например

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

## Примечания

[править | править код]

1. ↑ Tange O. First version of Parallel recovered (англ.) — 2021.
2. ↑ Tange O. GNU Parallel's 20th birthday (англ.) — GNU.org, 2022.
3. ↑ Tange O. GNU Parallel 20240322 ('Sweden') released (англ.) — 2024.
4. ↑ Tange O. GNU Parallel 20240522 ('Tbilisi') released (англ.) — 2024.
5. ↑ GNU's Who
6. ↑ GNU Parallel (неопр.). GNU.org. Дата обращения: 30 ноября 2016. Архивировано 1 февраля 2021 года.

## Ссылки

[править | править код]

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

На эту статью не ссылаются другие статьи Википедии.

Пожалуйста, установите ссылки в соответствии с принятыми рекомендациями.

|