Parallel | |
---|---|
![]() | |
Тип | Утилита |
Автор | Ole Tange[вд][5] |
Разработчик | Проект GNU |
Написана на | Perl |
Операционная система | GNU |
Первый выпуск | 6 января 2002[1][2] |
Последняя версия |
|
Тестовая версия | |
Репозиторий | git.savannah.gnu.org/cgi… |
Лицензия | GPLv3 |
Сайт | gnu.org/software/parallel/ |
![]() |
GNU parallel является утилитой командной строки для ОС Linux и других Unix-подобных операционных систем, которая позволяет выполнять shell-скрипты параллельно. GNU parallel - это свободное программное обеспечение, написанное Оле Танге на языке Perl. Программа доступна в соответствии с условиями лицензии GPLv3.[6]
Чаще всего используется для замены циклов, например
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 включает также
По умолчанию, параллельно запускается столько же задач, сколько и ядер процессора.
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.
![]() | На эту статью не ссылаются другие статьи Википедии. |