Найдите и выполните несколько сценариев параллельно

Хороший день,

Я попытался решить эту проблему все утро, но не имел успеха. Я хотел бы искать определенные сценарии в конкретной папке и выполнить их всех параллельно. Сценарии имеют различные имена, но весь конец с "run.sh". Ниже того, что я попробовал без успеха.

Первый подход должен был использовать, находят в сочетании с-execdir. Это работает, однако, сценарии выполняются последовательным способом. Я хочу, чтобы все сценарии были выполнены, одновременно параллельны). Кажется, нет никакой опции достигнуть этого с-execdir

find . -name "*run.sh" -type f -execdir 'nohup' {} '&' \;

Затем я пытался использовать xargs, потому что существует, имеет параллельную опцию (-P). Я еще не попробовал параллельную опцию, потому что я не могу заставить xargs запускать скрипты в их соответствующих подпапках. Команды ниже выполняют все сценарии, но делают это в папке, в которой я выполняю команду, поэтому сами сценарии не работают. Сценарии должны быть выполнены в их собственных подпапках. В вышеупомянутом примере-execdir делает это в противоположность - должностное лицо. Как я достигаю этого с xargs?

nohup find . -name "*run.sh" -type f | xargs -0 -I{} bash -c f\ \{\}

или

nohup find . -name "*run.sh" -type f | xargs -0 -I{} bash -c "f {}"

или

nohup find . -name "*run.sh" -type f | xargs -0 -I{} bash -c "./{}" 

Я действительно расстроен и надеюсь, что существует кто-то там, который может помочь. Огромное спасибо!

3
задан 2 December 2014 в 03:39

2 ответа

На основе ответа Чоробы:

find . -iname '*run.sh' -printf 'cd %h; ./%f\0' | xargs -L1 -0 -P0 bash -c

Вы можете использовать -printf для создания командной строки. % h - это каталог, в котором находится файл, а % f - это имя файла без пути (базовое имя). Параметр -P включает параллелизм в xargs , а -L1 -0 заставляет использовать одну строку ввода с нулевым символом в конце для каждой команды.

4
ответ дан 17 November 2019 в 09:58

Как насчет создания командных строк, которые вы хотите запустить, а затем их запуска?

find . -name '*run.sh' -type f -exec \
    echo 'c={}; cd ${c%/*} && nohup "./${c##*/}" &' \;

Если результат такой, как вы хотите, просто добавьте | bash и запустите снова.

1
ответ дан 17 November 2019 в 09:58

Другие вопросы по тегам:

Похожие вопросы: