У меня есть папка, содержащая много изображений. У меня есть код, который преобразует эти изображения в черно-белый формат, а затем использует tesseract для преобразования их в текстовые файлы. Я использую следующий код, чтобы разделить эти файлы на подгруппы:Как выполнять параллельные процессы для разных групп в папке?
i=0; for f in *; do d+dir_$(printf %03d $((i/(number of files in each folder+1))); mkdir -p $d; mv "$f" $d' let i++; done
Этой команда отлично работает, чтобы разделить файлы (помещает сгруппированные файлы в разные папки), но так как я планирую использовать эту процедуру для многих многие файлы, которые я хотел бы изменить, чтобы этот процесс был менее трудоемким (для перемещения файлов в папку потребовалось бы слишком много времени). Есть ли способ указать подгруппу файлов для запуска процесса и использовать &, чтобы выполнить несколько экземпляров одновременно? Например, я хотел бы запустить процесс для 400 файлов в папке, а затем использовать «&», чтобы запустить тот же процесс для файлов, которые находятся в порядке 401-800.
Вот код, который я использую для преобразования:
parallel -j 5 convert {} "-resample 200 -colorspace Gray" {.}BW.png ::: *.png ; parallel -j 5 tesseract {} {} -l tla -psm 6 ::: *BW.png ; rm *BW.png
К группе я просто имею в виду первые 400 файлов, то вторая группа будет следующие 400 файлов и так далее ...
Возможно, что-то связано с параметрами 'xargs' и' -P' ('--max-procs') и' -n' ('--max-args') ... – larsks
В этом пространстве осталось достаточно места чтобы разбить приведенные выше команды на одну команду на строку (и исправить ошибки синтаксиса, пока вы на ней). :) – lcd047
Пожалуйста, объясните, что такое * группы *. Также покажите хотя бы частичную иерархию ваших файлов и каталогов, как вы конвертируете их в черно-белые, как вы вызываете 'tesseract', как должны выглядеть результаты и где они должны быть написаны. –