Um script para fazer outro script lidar com todos os arquivos em sequência?

Um script para fazer outro script lidar com todos os arquivos em sequência?

Encontrei um script que funciona bem para converter arquivos PDF para o formato txt, com ocr.

Mas converte apenas um arquivo PDF de cada vez. Eu preciso convertê-los em massa.

Não tenho conhecimento de escrita de roteiro. O script está abaixo.

Como posso convertê-los em massa?

#!/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

Observação: li perguntas semelhantes, mas não consegui descobrir.

Responder1

Você poderia modificar seu script:

# 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

Então chame seu script assim:

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

Um bash forloop, quando não recebe nada para fazer um loop, percorre todos os argumentos da linha de comando. Por isso,

for INFILE

é equivalente a:

for INFILE in "$@"

Responder2

Pelo que entendi da sua pergunta, acho que é isso que você espera:

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

onde your_conv_script.shestá o script que você indicou acima.

Observe também que você precisa limpar os arquivos criados temporariamente.

informação relacionada