一个让另一个脚本按顺序处理所有文件的脚本?

一个让另一个脚本按顺序处理所有文件的脚本?

我找到了一个很好用的脚本,可以使用 ocr 将 pdf 文件转换为 txt 格式。

但它每次只转换一个pdf文件。我需要对它们进行大规模转换。

我对剧本写作一窍不通。脚本如下。

我怎样才能批量转换它们?

#!/bin/bash

## script to:
##   *  split a PDF up by pages
##   *  convert them to an image format
##   *  read the text from each page
##   *  concatenate the pages


## pass name of PDF file to script
INFILE=$1

## split PDF file into pages, resulting files will be
## numbered: pg_0001.pdf  pg_0002.pdf  pg_0003.pdf
pdftk $INFILE burst

for i in pg*.pdf ; do

    ## convert it to a PNG image file
    convert -density 200 -quality 100 $i ${i%.pdf}.png

    ## read text from each page
    tesseract ${i%.pdf}.png ${i%.pdf}.txt

done

## concatenate the pages into a single text file
cat pg*.txt > ${INFILE%.pdf}.txt

exit

注意:我读过类似的问题,但无法弄清楚。

答案1

您可以修改您的脚本:

# instead of INFILE=$1
for INFILE
do
#...

    for i in pg*.pdf ; do
        #...    
    done

    ## concatenate the pages into a single text file
    cat pg*.txt > ${INFILE%.pdf}.txt
done

然后这样调用你的脚本:

some-script.sh 1.pdf 2.pdf #...

当没有给定任何要循环的内容时,循环bash for将循环遍历所有命令行参数。因此,

for INFILE

相当于:

for INFILE in "$@"

答案2

根据我对你的问题的理解,我想这就是你所期望的:

for each in *.pdf
do
  your_conv_script.sh $each
done

your_conv_script.sh您上面指出的脚本在哪里。

另请注意,您需要清理临时创建的文件。

相关内容