0

我当前的shell脚本是这样的:

for i in *.pdf
do
    convert -density 400 $i -depth 8 ${i/pdf/jpg}
done

for j in *.jpg
do
    tesseract -l eng $j ${j/.jpg}
    rm $j
    mv ${j}.txt textfile
done

所以它大致做的是,对于每个 pdf 文件,它将其转换为 jpg 文件,对于每个 jpg 文件,我使用 tesseract 将其转换为原始文本文件。从 pdf 到 jpg 的转换不会出现错误,但是 tesseract 可能会报告错误,例如:“由于已加入而取消了长度为 0 的重复”。我的脚本从那里停止......有没有办法让我的脚本在看到某种错误报告时跳过?所以我不需要转录损坏的 jpg 文件并想跳过它们。任何形式的帮助将不胜感激!

4

3 回答 3

0

您可以检查$?(上一个命令的返回码)并在脚本非零时退出(例如,失败)。

[ $? != 0 ] && echo "Failed and died"
# More traditionally
if [ $? != 0 ] ; then
  return_val=$?
  echo "Failed with ${return_val} code"
  exit $return_val
fi

您还可以将输出流(stdout,stderr)合并到标准输出并取值

r=$(tessaract -l eng $j ... &>/dev/stdout)

并将$r包含 stderror 结果。

或者,您可以将输出发送到您通过以下方式创建的另一个文件描述符exec

于 2013-04-25T02:28:41.023 回答
0

tesseract 向命令行返回错误。

for j in *.jpg
do
    tesseract -l eng $j ${j/.jpg}
    [ $? -ne 0 ]  && break
    rm $j
    mv ${j}.txt textfile
done
于 2013-04-25T02:29:27.250 回答
0

如果您的脚本在 tesseract 失败时中止,那么您可能已经set -e接近脚本的顶部。如果您希望脚本在 tesseract 失败时中止,请添加set -e或检查是否tesseract成功:

if ! tesseract -l eng $j ${j/.jpg}; then exit 1; fi

或者

 tesseract -l eng $j ${j/.jpg} || exit 1
于 2013-04-25T02:34:03.567 回答