【发布时间】: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