在 Bash 脚本中回显总页码

在 Bash 脚本中回显总页码

我有以下用于批量 pdf-ocr 处理的脚本,它工作正常

#!/bin/sh
# apt-get install exactimage tesseract-ocr ghostscript
# bash tut: http://linuxconfig.org/bash-scripting-tutorial
# Linux PDF,OCR: http://blog.konradvoelkel.de/2013/03/scan-to-pdfa/

y="`pwd`/$1"
echo Will create a searchable PDF for $y

x=`basename "$y"`
name=${x%.*}

mkdir "$name"
cd "$name"

# splitting to individual pages
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r300 -dTextAlphaBits=4 -o out_%04d.jpg -f "$y"

# process each page
for f in $( ls *.jpg ); do
  # extract text
  tesseract -l eng -psm 3 $f ${f%.*} hocr
 # echo Page ?? of ?? done! 

  # remove the “<?xml” line, it disturbed hocr2df
  grep -v "<?xml" ${f%.*}.html > ${f%.*}.noxml
  rm ${f%.*}.html

  # create a searchable page
  hocr2pdf -i $f -s -o ${f%.*}.pdf < ${f%.*}.noxml
  rm ${f%.*}.noxml
  rm $f
done

# combine all pages back to a single file
# from http://www.ehow.com/how_6874571_merge-pdf-files-ghostscript.html
gs -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=../${name}_searchable.pdf *.pdf

cd ..
rm -rf $name

我只想回显输入 pdf 文件的总页数中正在完成哪一页?

答案1

因为你已经一页一页地处理,这可以使用 bash 来完成算术评估。

替换当前读取的部分

# process each page
for f in $( ls *.jpg ); do
  # extract text

具有以下内容:

CURRENT_PAGE=0
# process each page
for f in *.jpg ; do
  CURRENT_PAGE=$(( $CURRENT_PAGE + 1 ))
  echo Processing page $CURRENT_PAGE ...
  # extract text

表示$(( ... ))算术评估。man bash更多详情请参见;搜索ARITHMETIC EVALUATION

我们从第 0 页开始,在处理第一个文件之前立即加 1,然后打印当前页码。

如果没有任何名为 print 的命令有自己的任何输出,您可以通过将该echo行替换为以下内容来获得更清晰的输出:

  printf "Processing page %d ...\r" $CURRENT_PAGE

表示\r“返回行首”(从技术上讲,它被视为回车符),因此下一个命令的输出将覆盖您刚刚打印的内容。要在脚本完成后查看它,请在末尾添加:

printf "\n"

移动到下一行。

并作为特登指出在一条评论,你真的应该使用

for f in *.jpg

而不是for f in $( ls *.jpg ),但那是另一个问题了。 (我已将其合并到上面。)$f出于同样的原因,我还建议在您以某种方式引用的变量扩展周围添加引号。

相关内容