У меня есть этот код для поиска каталогов в текущей папке и последующего архивирования ее
find . -type d -maxdepth 1 -mindepth 1 -print -exec tar czf {}.tar.gz {} \;
У меня сотни папок, и в настоящее время он обрабатывает одну папку за другой.
Возможно ли, что я смогу запустить партию из 5 штук параллельно?
решение1
Используя xargs
you можно достичь некоторой степени параллелизма:
find . -type d -maxdepth 1 -mindepth 1 -print0 |
xargs -t0 -n 1 -P 5 -I XX tar czf XX.tar.gz XX
Это -P 5
флаг, который ограничивает количество параллельных процессов, запускаемых xargs
до пяти, в то время как -n 1
используется для выполнения утилиты только с одной строкой ввода за раз. С помощью -I XX
мы говорим, что строка ввода, которая будет путем к каталогу, должна быть заменена на строку XX
в команде.
xargs
выведет вызовы по tar
мере их выполнения. Удалите, -t
чтобы отключить это.
Пути к каталогам передаются из find
with -print0
и принимаются xargs
with -0
(т.е. используются \0
в качестве разделителя), чтобы разрешить использование экзотических имен.
Как было отмеченов ответе в другом месте на этом сайте:
Обратите внимание, что узким местом операции, скорее всего, будет жесткий диск. По этой причине, даже если вы разделите задачу на два или более процессов, она не будет работать быстрее, если только они не будут работать на разных дисках.