Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Параллелизация в bash скрипте.  (Прочитано 709 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн EvgeniusDragon

  • Автор темы
  • Участник
  • *
  • Сообщений: 193
    • Просмотр профиля
Параллелизация в bash скрипте.
« : 22 Марта 2014, 22:03:11 »
Есть скрипт к примеру:
#!/bin/bash
for i in `ls -d */ | cut -f1 -d'/'`
do cd $i/
tar -cvlzmaf ~/dir/$i.tar.lzma *
cd ..
Скрипт архивирует файлы во всех папках и называет архив именем папки в котором хранятся файлы. Но вот у меня 4 ядра, и архивация использует только одно из них. Мне было бы удобно если бы архивировало 4 папки сразу. Я думал использовать parallel, но уже закончились идеи как это сделать. Раньше я без проблем им делал такое
find . -name *.dsl | parallel -j 4 dictzip {}Этим я паковал словари сразу в 4 ядра. То есть 4 файла за раз, по 1 на ядро.
Не соображу как сделать подобное в скрипте.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Параллелизация в bash скрипте.
« Ответ #1 : 22 Марта 2014, 22:53:48 »
EvgeniusDragon, погляди это, как раз я там описал, как это сделать лучше всего. Что непонятно, спрашивай.

Оффлайн EvgeniusDragon

  • Автор темы
  • Участник
  • *
  • Сообщений: 193
    • Просмотр профиля
Re: Параллелизация в bash скрипте.
« Ответ #2 : 22 Марта 2014, 23:05:07 »
EvgeniusDragon, погляди это, как раз я там описал, как это сделать лучше всего. Что непонятно, спрашивай.
Отличный пост) Я уже читал его раньше)
Но только что я сообразил сделать так:
(for i in `ls -d */ | cut -f1 -d'/'` ; do cd $i/ ; echo "cd ~/папки/$i/ ; tar -cvlzmaf ~/архивы/$i.tar.lzma *" ; cd .. ; done;) | parallel -j 4 sh -c {}
Результат на ура.

В итоге заходит в каждую папку, архивирует файлы в них и называет архив именем папки и помещает в нужную мне директорию. Как то так. Ну по скрипту легко понять что он делает. Но может кому то пригодится в будущем такое.

PS. Заметил что на свои вопросы я все равно нахожу сам ответы :)
« Последнее редактирование: 22 Марта 2014, 23:08:51 от EvgeniusDragon »

 

Страница сгенерирована за 0.122 секунд. Запросов: 25.