是否可以使用gnu parallel
的一个实例同时有两个输入文件类型?在GNU并行中同时输入两个文件类型?
此长命令:
find . -name \*.pdf | parallel -j 4 --progress --eta 'mkdir -p {.} && gs -dQUIET -dINTERPOLATE -dSAFER -dBATCH -dNOPAUSE -dPDFSETTINGS=/ebook -dNumRenderingThreads=4 -sDEVICE=pgmraw -r300 -dTextAlphaBits=4 -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dOverrideICC -o {.}/{.}-%03d.pgm {}' && time find . -name \*.pgm | parallel -j 4 --progress --eta 'tesseract {} {.} -l deu_frak && rm {.}.pgm'
一个)
- 创建用于读取每个PDF文件夹(第1输入文件类型)
- 与
Ghostscript
转换PDF到PGM图像 - 将它们移动到相应的文件夹中
- 然后它将使用tesseract执行每个pgm上的OCR(第二输入文件类型)
- 之后它将文本文件保存在各个文件夹中
- 最后删除所有的pgm图像文件。
但是,上述命令实际上由两个命令组成,它们与&&
相结合,将上述例程分成两个独立的部分。其结果是,它会:
B)
- 转换首先PDF转换PGM图像文件(吃了大量的磁盘 空间)
- 之前,它将与OCR和启动随后清除当时不需要的pgm图像文件。
这是不受欢迎的,因为它会在命令的第二部分执行之前吃掉我的所有磁盘空间!
是有可能这两个命令结合一体,使parallel
会经历的整个过程)的前四个PDF文件(如parallel
做4个作业的同时-j 4
),才去未来四年pdf文件?
然而,似乎有点像下面的小例子,是不可能的parallel
:
parallel -j 4 --progress --eta 'mkdir -p {.} && gs -sDEVICE=pgmraw -r300 -o {.}/{.}-%03d.pgm {}' && tesseract {} {.} -l deu_frak && rm {.}.pgm’ ::: *.pdf *.pgm
注意,两个输入文件扩展名::: *.pdf *.pgm
末。
我能做些什么来使parallel
按照例行程序a)?
编辑:
这是整个代码提出奥莱丹下我曾尝试:
generate_pgm() {
PDF="$1"
find . -name \*.pdf | parallel 'mkdir -p {.} && gs -dQUIET -dINTERPOLATE -dSAFER -dBATCH -dNOPAUSE -dPDFSETTINGS=/ebook -dNumRenderingThreads=4 -sDEVICE=pgmraw -r300 -dTextAlphaBits=4 -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dOverrideICC -o {.}/{.}-%03d.pgm {}' ::: *.pdf
}
export -f generate_pgm
ocr() {
PGM="$1"
find . -name \*.pgm | parallel 'tesseract {} {.} -l deu_frak && rm {.}.pgm'
rm "$PGM"
}
export -f ocr
time parallel -j 4 --progress --eta 'generate_pgm {}; parallel --argsep ,,, ocr ,,, pgm/*.pgm' ::: *pdf
不幸的是,它已经成功为这个剧本基本上会做同样的我原来的脚本。它将创建所有PDF的文件夹,并开始将所有PDF转换为PGM,同时在第一个PGM图像上启动OCR,而不是在开始接下来的四个PDF之前通过每个四个PDF的全部过程。
谢谢Ole Tange的回复。我用上面的写命令尝试了解决方案1。但是,脚本不会等待每个过程完成,但可以简单地将PDF转换为PGM。我忽略了什么? –
请参阅编辑一次转换1的解决方案。 –
您好Ole Tange,不幸的是脚本的编辑也不起作用。它不会超越PDF转换为PGM。没有OCR完成。另外,它告诉我'rm:pgm/*。pgm:没有这样的文件或目录'。 –