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

1

Eu encontrei um script bem funcional para converter arquivos pdf em formato txt, com ocr.

Mas ele converte apenas um arquivo pdf a cada vez. Eu preciso convertê-los em massa.

Não tenho conhecimento da escrita de scripts. O roteiro 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 as perguntas semelhantes, mas não consegui descobrir.

    
por Aytac K 06.10.2014 / 17:27

2 respostas

3

Você pode 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

Em seguida, chame seu script assim:

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

Um loop bash for , quando não recebe nenhum loop, faz um loop sobre todos os argumentos da linha de comando. Portanto,

for INFILE

é equivalente a:

for INFILE in "$@"
    
por 06.10.2014 / 17:40
1

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.sh é o script que você denotou acima.

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

    
por 06.10.2014 / 17:33