Предполагая, что это работает правильно -только в серийном:
find dir_* -type f -execdir sh for_loop.sh {} \;
Тогда вы сможете заменить это на:
find dir_* -type f | parallel 'cd {//} && sh for_loop.sh {}'
Чтобы запустить ее в нескольких терминалах, GNU Parallel поддерживает tmux
запуск каждой команды в отдельной tmux
панели:
find dir_* -type f | parallel --tmuxpane 'cd {//} && sh for_loop.sh {}'
По умолчанию используется одно задание на ядро ЦП. В вашем случае вы можете запустить на одно задание больше, чем у вас есть ядер:
find dir_* -type f | parallel -j+1 --tmuxpane 'cd {//} && sh for_loop.sh {}'
GNU Parallel — это универсальный распараллеливатель, который упрощает параллельное выполнение заданий на одной машине или на нескольких машинах, к которым у вас есть доступ по ssh.
Если у вас есть 32 разных задания, которые вы хотите запустить на 4 ЦП, прямой способ распараллеливания — запустить 8 заданий на каждом ЦП:
GNU Parallel вместо этого порождает новый процесс по завершении одного из них -, сохраняя активность ЦП и тем самым экономя время:
Установка
Из соображений безопасности вам следует установить GNU Parallel с помощью вашего менеджера пакетов, но если GNU Parallel не упакован для вашего дистрибутива, вы можете выполнить персональную установку, которая не требует root-доступа. Это можно сделать за 10 секунд, выполнив это:
$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
fetch -o - http://pi.dk/3 ) > install.sh
$ sha1sum install.sh | grep 883c667e01eed62f975ad28b6d50e22a
12345678 883c667e 01eed62f 975ad28b 6d50e22a
$ md5sum install.sh | grep cc21b4c943fd03e93ae1ae49e28573c0
cc21b4c9 43fd03e9 3ae1ae49 e28573c0
$ sha512sum install.sh | grep da012ec113b49a54e705f86d51e784ebced224fdf
79945d9d 250b42a4 2067bb00 99da012e c113b49a 54e705f8 6d51e784 ebced224
fdff3f52 ca588d64 e75f6033 61bd543f d631f592 2f87ceb2 ab034149 6df84a35
$ bash install.sh
Другие варианты установки см. вhttp://git.savannah.gnu.org/cgit/parallel.git/tree/README
Узнать больше
Посмотреть другие примеры:http://www.gnu.org/software/parallel/man.html
Посмотрите вступительные видеоролики:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Прохождение обучения:http://www.gnu.org/software/parallel/parallel_tutorial.html
Подпишитесь на список рассылки, чтобы получить поддержку:https://lists.gnu.org/mailman/listinfo/parallel
Мы можем сделать следующее, чтобы запустить imwheel, когда мышь подключена, и остановить, когда мышь отключена.
Я использую Fedora 33, но аналогичное решение должно работать и в других дистрибутивах.
Этот метод предполагает, что на вашем компьютере запущена служба imwheel.
$HOME/xinputwatcher.sh(не забудьте выполнить команду chmod +x для этого файла)
#!/bin/bash
while true
do
if [[ $(xinput list --name-only | grep 'Logitech USB-PS/2 Optical Mouse') ]];
then
if [[ $(systemctl --user is-active imwheel) == inactive ]];
then
systemctl --user start --now imwheel
echo "starting imwheel"
else
echo "imwheel already running"
fi
else
if [[ $(systemctl --user is-active imwheel) == active ]];
then
systemctl --user stop --now imwheel
echo "stopping imwheel"
else
echo "imwheel already stopped"
fi
fi
sleep 3
done
xinput
, чтобы получить список устройств ). elseif
. sleep
; если мы отключим мышь, это должно подействовать в течение 3 секунд. ./xinputwatcher.sh
. Он должен запускать imwheel, когда вы подключаете мышь, и останавливать imwheel, когда вы его отключаете. Теперь создайте службу, которая автоматически запускает этот сценарий при запуске системы.
$HOME/.config/systemd/user/xinputwatcher.service
[Unit]
Description=xinputwatcher
[Service]
Type=simple
ExecStart=$HOME/xinputwatcher.sh
KillMode=process
[Install]
WantedBy=graphical-session.target
Наконец, включите службу, чтобы она запускалась автоматически при перезагрузке.
systemctl --user daemon-reload
systemctl --user enable xinputwatcher.sh
Итак, чтобы решить эту же проблему в Ubuntu 20.10, я установил сочетания клавиш в Ubuntu. Используя настраиваемые сочетания клавиш gnome, вы можете запускать через него любую команду. Чтобы запустить imwheel, введите
imwheel
и чтобы остановить imwheel, введите
killall imwheel
вот и все, теперь вы можете запускать эти команды, назначая сочетания клавиш, подобные этому
Я использовал F1 для запуска и F2 для остановки imwheel, вы можете выбрать свой собственный! Надеюсь, поможет!