Использовать файлы из команды find в параллельных пакетах

Использовать файлы из команды find в параллельных пакетах

У меня есть этот код для поиска каталогов в текущей папке и последующего архивирования ее

find . -type d -maxdepth 1 -mindepth 1 -print -exec tar czf {}.tar.gz {} \;

У меня сотни папок, и в настоящее время он обрабатывает одну папку за другой.

Возможно ли, что я смогу запустить партию из 5 штук параллельно?

решение1

Используя xargsyou можно достичь некоторой степени параллелизма:

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чтобы отключить это.

Пути к каталогам передаются из findwith -print0и принимаются xargswith -0(т.е. используются \0в качестве разделителя), чтобы разрешить использование экзотических имен.


Как было отмеченов ответе в другом месте на этом сайте:

Обратите внимание, что узким местом операции, скорее всего, будет жесткий диск. По этой причине, даже если вы разделите задачу на два или более процессов, она не будет работать быстрее, если только они не будут работать на разных дисках.

Связанный контент