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

时间:2015-06-09 15:59:17

标签: bash unix parallel-processing

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

2 个答案:

答案 0 :(得分:1)

我会让Make来处理多处理,使用这样的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!

答案 1 :(得分: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;

感谢所有贡献的人。