Ну, первичный -mmin - это GNUism, который, скорее всего, не поддерживается в AIX, так как это глупое расширение по сравнению с тем, что использовали люди из BSD и я. как расширение уже в 1980-х годах. Учитывая тот факт, что sfind отлично компилируется в AIX, я рекомендую:
sfind . -mindepth 1 -type d -mtime +24h -exec rm -rf {} +
Код находится в schilytools по адресу: https://sourceforge.net/projects/schilytools/files/
Используйте xargs
с -n 1
, что означает «передавать только один аргумент при каждом вызове утилиты».
Что-то вроде:
printf '%s\n' file*.txt | xargs -n 1 -P 100 perl dataProcessing.pl
, который предполагает, что имена файлов не содержат буквальных символов новой строки.
Если у вас есть GNU xargs
или реализация xargs
, которая понимает-0
(для чтения nul -аргументов с разделителями, что позволяет использовать имена файлов с символами новой строки )и -r
(, чтобы не запускать утилиту с пустым списком аргументов, когда file*.txt
ничему не соответствует и nullglob
действует ), вы можете сделать
printf '%s\0' file*.txt | xargs -r0 -n 1 -P 100 perl dataProcessing.pl
Обратите внимание, что оба этих варианта могут запускать до 100 параллельных экземпляров скрипта, что может быть не совсем то, что вам нужно. Вы можете ограничить его до разумного числа, связанного с количеством ЦП на вашем компьютере (или связанным с общим объемом доступной оперативной памяти, разделенным на ожидаемое использование памяти для каждой задачи, если она привязана к памяти ).
Здесь не нужно выдумывать. В цикле bash for -просто запустите процесс perl:
for f in file*.txt; do
perl dataProcessing.pl "$f" &
done
# wait for them to complete
wait
echo "All done."
GNU Parallel создан именно для этого:
parallel some_command {} ::: *.txt
По умолчанию используется одно задание на ядро ЦП. Если вы хотите запустить 100 заданий параллельно:
parallel -j100 some_command {} ::: *.txt
Зная Perl, вы будете чувствовать себя как дома, используя даже более продвинутые функции GNU Parallel. Как вы думаете, что это делает:
parallel echo '{= s/(\d+)/$1*2/e; s/(.)/uc($1)/e; s/bar/baz/; s/foo/bar/ =}' \
::: 'my foo' 'i went to a baraar to get a 12" crowfoo'
GNU Parallel — это универсальный распараллеливатель, который позволяет легко выполнять задания параллельно на одной машине или на нескольких машинах, к которым у вас есть доступ по ssh.
Если у вас есть 32 разных задания, которые вы хотите запустить на 4 ЦП, прямой способ распараллеливания — запустить 8 заданий на каждом ЦП:
GNU Parallel вместо этого порождает новый процесс, когда он завершается -, сохраняя активность ЦП и, таким образом, экономя время:
Установка
Из соображений безопасности вам следует установить GNU Parallel с помощью вашего менеджера пакетов, но если GNU Parallel не упакован для вашего дистрибутива, вы можете выполнить персональную установку, которая не требует root-доступа. Это можно сделать за 10 секунд, сделав это:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Другие варианты установки см. в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