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