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

У меня есть этот код для поиска dirs в текущей папке, а затем tar it

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

У меня есть 100s папок, и в настоящее время он делает по одной папке.

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

Используя xargs вы можете достичь степени параллелизма:

 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 с xargs до пяти, тогда как -n 1 используется только для выполнения утилиты с одной входной строкой за раз. С -I XX мы говорим, что строка ввода, которая будет путь к каталогу, должна быть заменена на строку XX в команде.

xargs будет распечатывать invocations tar как они выполняются. Удалите -t чтобы отключить это.

-print0 каталогов передаются из find с -print0 и принимаются xargs с -0 (т. xargs Используя \0 качестве разделителя), чтобы допускать, возможно, экзотические имена.


Как указано в ответе в другом месте на этом сайте :

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