如何为文件夹中的不同组执行并行处理?

问题描述 投票:0回答:2

我有一个包含大量图像的文件夹。我有一个代码将这些图像转换为黑白格式,然后使用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

这个命令可以很好地分割文件(将分组的文件放到不同的文件夹中)但是因为我打算对很多文件使用这个程序,我想把这个过程改成更少的时间(这也需要一点时间)将文件移动到文件夹的时间很长)。有没有办法可以指定文件子组以运行进程并使用&以便一次执行多个实例?例如,我想在文件夹中运行firt 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个文件,依此类推......

bash unix parallel-processing
2个回答
1
投票

我会让Make来处理多处理,使用这样的Makefile:

Makefile文件:

EXT_IN          := .jpg
EXT_OUT         := .txt
FILES_IN        := $(wildcard *$(EXT_IN))
FILES_OUT       := $(addsuffix $(EXT_OUT), $(basename $(FILES_IN)))

.PHONY: all

$(FILES_OUT):
        @echo Generating $@ from $(addsuffix $(EXT_IN), $(basename $@))
        # Do your conversion here!

all: $(FILES_OUT)
        @echo "Processing finished!"

运行:

$ > make all -j 8
Generating file1.txt from file1.jpg
Generating file2.txt from file2.jpg
Generating file3.txt from file3.jpg
Generating file4.txt from file4.jpg
Generating file5.txt from file5.jpg
Generating file6.txt from file6.jpg
Processing finished!

0
投票

所以我的整个考验是试图在包含大量文件的目录上使用我的代码。为了摆脱错误说明有太多参数的错误,我使用了从以前的Ole Tange帖子收集的代码:

ls ./ | grep -v '\BW.png' | parallel -j 60 convert {} "-resample 100 -colorspace Gray" {.}BW.png; ls ./ | grep \BW.png | parallel -j 60 tesseract {} {} -l tla -psm 6; find . -name "*BW.png" -print0 | xargs -0 rm;

感谢所有贡献的人。

© www.soinside.com 2019 - 2024. All rights reserved.