Otimização do script Bash (PDFTK + grep…)

0

O próximo script pega todos os arquivos PDF dentro de uma pasta e, em seguida, para cada um deles, ele é dividido em vários arquivos pequenos com base em um determinado critério, usando pcregexp para buscar esses critérios. Em seguida, comprima os arquivos resultantes e coloque-os em outra pasta:

    for ar in *.pdf ; do file="$ar" 
 pagecount=$(pdfinfo "$file" | grep "Pages" | awk '{ print $2 }')
 # Criterio de busqueda y corte: texto "CLIENTE:". 
 storedid=$(pdftotext -simple -f 1 -l 1 "$file" - | pcregrep -M --ignore-case -o "CLIENTE:\s*[0-9]{5,6}" | grep -Eo "[0-9]{5,6}" | cat)
 pattern=''
 for (( pageindex=1; pageindex <= $pagecount+1; pageindex+=1 )); do
  pageid=$(pdftotext -simple -f $pageindex -l $pageindex "$file" - | pcregrep -M --ignore-case -o "CLIENTE:\s*[0-9]{5,6}" | grep -Eo "[0-9]{5,6}" | cat)
  echo "$pageid"
  # match ID found on the page to the stored ID
  if [[ $pageid == $storedid ]] || [[ $pageid == '' ]]; then
   pattern+="$pageindex "
   pagetitle+="$header+"
   if [[ $pageindex == $pagecount ]]; then 
    pdftk "$file" cat $pattern output "pre_$storedid.pdf"
    storedid=0
    pattern=''
    #pagetitle=''

   fi
  else 
   #process previous set of pages to output
   pdftk "$file" cat $pattern output "pre_$storedid.pdf"
   storedid=$pageid
   pattern="$pageindex "
   #pagetitle="$header+"

  fi
 done
done

#Recorre el directorio desde donde se lo invoca y comprime todos los archivos PDF que inician su nombre de archivo con la palabra "RESUMEN". A cada archivo le asigna el sufijo "_CP" antes de la extensión para diferenciarlo.
for f in *pre_*.pdf ; do pdforiginal="$f" ; pdftops -paper match -nocrop -noshrink -nocenter -level3 -q "$pdforiginal" - | ps2pdf14 -dEmbedAllFonts=true -dUseFlateCompression=true -dProcessColorModel=/DeviceCMYK -dConvertCMYKImagesToRGB=false -dOptimize=true -dPDFSETTINGS=/prepress - - | cpdf -squeeze -stdin -o "dil_${pdforiginal%%.*}.pdf" ; done

#Crea un directorio con año-mes actual.
subdir="$(date +%Y-%m)"
mkdir "$subdir"

#Recorre el dir actual y mueve todos los archivos PDF que comienzan con "RESUMEN" y tienen el sufijo "_CIERTO_" a la carpeta creada previamente.
for f in dil_pre_*.pdf ; do mv "$f" "$subdir/${f#dil_pre_}"; done

#Recorre el dir actual y elimina todos los archivos PDF que comiezan con "RESUMEN" (o sea, los recortes originales).
for f in pre_*.pdf ; do rm -f "$f" ; done

Os scripts funcionam perfeitamente, mas com arquivos PDF grandes (> 150mb), ele fica absurdamente lento (leva 25 segundos para dividir por critérios).

Eu tentei usar o DASH, mas não houve nenhuma atualização significativa. Estou pensando em alguma penalidade de IO que o script está sofrendo, fechando e reabrindo o arquivo PDF grande em cada loop interno, mas não sei como melhorar isso. Alguma idéia?

    
por RBaravalle 20.11.2018 / 18:33

0 respostas