将 Xargs 与 hocr2pdf 结合使用

将 Xargs 与 hocr2pdf 结合使用

我正在尝试在文件夹中的一系列 .tif 文件上使用 tesseract 和 hocr2pdf。

使用ls *.tif | xargs -I% tesseract % % -l fra hocr生成具有相同文件名但添加了 .html 的 html 文件。但ls *.tif |xargs -I% hocr2pdf -i % -n -o %.pdf < %.html不起作用。我收到错误消息%.html not found。似乎 xargs<在 hocr2pdf 命令中遇到了问题。

我该如何避免这个问题?

答案1

xargs 不适合这个任务。您需要一个 shell 来进行重定向。

一种选择是从 xargs 调用 bash,但使用 for 循环更简单:

for f in ./*.tif; do
    tesseract "$f" "$f" -l fra hocr
    hocr2pdf -i "$f" -n -o "$f.pdf" < "$f.html"
done

答案2

首先,永远不要解析 ls 的输出。

现在,它不起作用的原因是xargs看不到%.html,而 bash 却能看到。<被视为命令的结尾xargs,因此您设置的替换 ( -I%) 不再有效。更好的方法是这样做:

find . -maxdepth 1 -name "*.tif" -print0 | while IFS= read -r -d '' n; do 
    tesseract "$n" "$n" -l fra hocr &&
    hocr2pdf -i "$n.html" -n -o "$n.pdf"
done 

答案3

使用 GNU Parallel 您可以实现并行处理:

parallel "tesseract {} {} -l fra hocr; hocr2pdf -i {} -n -o {}.pdf < {}.html" ::: *.tif

安装 GNU Parallel 只需 10 秒钟:

wget pi.dk/3 -qO - | sh -x

观看介绍视频以了解更多信息:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

相关内容