Ein Skript, das ein anderes Skript dazu bringt, alle Dateien der Reihe nach zu verarbeiten?

Ein Skript, das ein anderes Skript dazu bringt, alle Dateien der Reihe nach zu verarbeiten?

Ich habe ein gut funktionierendes Skript gefunden, um PDF-Dateien mit OCR in das TXT-Format zu konvertieren.

Es konvertiert jedoch jedes Mal nur eine PDF-Datei. Ich muss mehrere Dateien gleichzeitig konvertieren.

Ich habe keine Ahnung vom Drehbuchschreiben. Das Drehbuch finden Sie unten.

Wie kann ich sie massenweise konvertieren?

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

Hinweis: Ich habe ähnliche Fragen gelesen, bin aber nicht dahinter gekommen.

Antwort1

Sie könnten Ihr Skript ändern:

# 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

Rufen Sie dann Ihr Skript folgendermaßen auf:

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

Eine bash forSchleife durchläuft alle Befehlszeilenargumente, wenn ihr nichts zum Schleifen gegeben wird. Daher

for INFILE

ist äquivalent zu:

for INFILE in "$@"

Antwort2

So wie ich Ihre Frage richtig verstehe, erwarten Sie vermutlich Folgendes:

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

wo your_conv_script.shist das Skript, das Sie oben angegeben haben?

Beachten Sie auch, dass Sie temporär erstellte Dateien bereinigen müssen.

verwandte Informationen