GNU parallel (GNU parallel)
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 включает также
- группировка стандартного вывода и стандартного потока ошибок, поэтому вывод параллельно запущенных задач не работает вместе;
- сохраняет порядок вывода, оставляя тот же самый порядок как на вводе;
- приятно иметь дело с именами файлов, содержащих специальные символы, такие как пробел, одиночная кавычка, кавычки, амперсанд и кодировку 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.
См. также
[править | править код]Примечания
[править | править код]- ↑ Tange O. First version of Parallel recovered (англ.) — 2021.
- ↑ Tange O. GNU Parallel's 20th birthday (англ.) — GNU.org, 2022.
- ↑ Tange O. GNU Parallel 20241022 ('Sinwar Nasrallah') released [stable] (англ.) — 2024.
- ↑ Tange O. GNU Parallel 20240922 ('Gold Apollo AR924') released (англ.) — 2024.
- ↑ GNU's Who
- ↑ GNU Parallel . GNU.org. Дата обращения: 30 ноября 2016. Архивировано 1 февраля 2021 года.
Ссылки
[править | править код]На эту статью не ссылаются другие статьи Википедии. |