Русская Википедия:GNU parallel
GNU parallel является утилитой командной строки для ОС Linux и других Unix-подобных операционных систем, которая позволяет выполнять shell-скрипты параллельно. GNU parallel - это свободное программное обеспечение, написанное Оле Танге на языке Perl. Программа доступна в соответствии с условиями лицензии GPLv3.[1]
Использование
Чаще всего используется для замены циклов, например
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.
См. также
Примечания
Ссылки
- Страницы с ошибками в подсветке синтаксиса
- Русская Википедия
- Страницы с неработающими файловыми ссылками
- Свободное программное обеспечение, написанное на Perl
- Программное обеспечение проекта GNU
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Википедия
- Статья из Википедии
- Статья из Русской Википедии