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同じ理由で、何らかの方法で参照する変数拡張の周りに引用符を追加することをお勧めします。

関連情報