【问题标题】:How to perform parallel processes for different groups in a folder?如何为文件夹中的不同组执行并行处理?
【发布时间】:2015-06-09 15:59:17
【问题描述】:

我有一个包含很多图像的文件夹。我有一个将这些图像转换为黑白格式的代码,然后使用 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)...
  • 本论坛有足够的空间将上述命令拆分为每行一个命令(并在您使用时修复语法错误)。 :)
  • 请解释一下是什么。还至少显示文件和目录的部分层次结构,如何将它们转换为黑白,如何调用tesseract,结果应该如何看待以及它们应该写在哪里。
  • d+dir_$(...) : 语法错误...实际上是“找不到命令”,但仍然...
  • @MarkSetchell @lcd047@twalberg 感谢您的意见。我已经用一些关于我的过程的更多信息更新了这个问题。提前致谢

标签: bash unix parallel-processing


【解决方案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!

【讨论】:

    【解决方案2】:

    所以我的整个考验是尝试在包含大量文件的目录上使用我的代码。为了摆脱说参数太多的错误,我使用了从以前的 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;
    

    感谢所有做出贡献的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-14
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      相关资源
      最近更新 更多