Executando verificação de segurança...
2

[shellscript] Renomeando vários PDF's de acordo com texto presente no arquivo

Caso real: Vários arquivos em PDF que precisavam ser separados conforme o mês que foram quitados (essa informação consta no corpo do documento) e pode ser referenciada por duas linhas que contém o seguinte formato:

Quitado
dd/mm/aaaa

e com um sequêncial numerico único com a linha no formato:

3-EST.000nn 00n

formato do nome após execução do script

MMM-000nn00n.pdf

Exemplo:
JAN-00022001.pdf

Dependencias: poppler, grep, sed


#!/bin/bash
# hudsonBomfim ver 300623

MES=("NULL" "JAN" "FEV" "MAR" "ABR" "MAI" "JUN" "JUL" "AGO" "SET" "OUT" "NOV" "DEZ")

for pdf in *.pdf 
do  
    pdftotext "${pdf}"
    nomeArquivo=`basename -s .pdf "${pdf}"`
    mesNumero=`grep -A2 'Quitado' "${nomeArquivo}.txt" | grep -o '/[0-1][0-9]/' | tr -d '/0'`
    novoNome=`sed '10!d;s/3-EST\.//;s/ //' "${nomeArquivo}.txt"`
    mv "${pdf}" "${MES[mesNumero]}-${novoNome}.pdf"
done
rm *.txt

Vale dizer que não funciona para PDF's de documentos feitos a partir de imagens

Carregando publicação patrocinada...
1

Vou dar uma contribuição para arquivos JPEG com imagens, usando um arquivo CSV com uma lista de nomes, um nome por linha, na verdade nem precisaria ser CSV.

#!/bin/bash

#Passo 1: Criar arquivo temporário
#Passo 2: Converter JPEG para Texto.
#Passo 3: Pesquisar se no arquivo tem o texto do csv
#Passo 4: Endireitar o texto
#Passo 5: Converter para pdf pesquisavel
#Passo 6: Salvar com o novo nome

#variaveis
#OBS criar uma pasta chamada resultados. 
#Colocar as imagens na pasta image
#precisa de um arquivo de texto chamado data.csv com nomes em cada linha

INPUT=data.csv
IFS=,


#Passo1
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)"
WORK_DIR=`mktemp -d -p "$DIR"`
if [[ ! "$WORK_DIR"  || ! -d "$WORK_DIR" ]]; then
    echo "Não foi criado o diretório temporario"
    exit 1
fi

function cleanup {
    rm -rf "$WORK_DIR"
    echo "Diretório temporário está sendo deletado: $WORK_DIR"
}

trap cleanup EXIT

tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ%/-15 > out

#Passo2

for i in image/*
do
   if [ -f "$i" ]; then
    tesseract "$i" "$WORK_DIR/${i##*/}
    echo $(sed ':a;N;$!ba;s/\n/ /g' "$WORK_DIR/${i##*/}.txt") > "$WORK_DIR/${i##*/}.txt"
   fi
done

#Passo3
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read col1
do 
    for i in $WORK_DIR/*.txt
    do
        string=`cat "$i" | tr "\n" " "`
        cola=`echo $col1 | sed 's/\\r//g'`
        min=1
        colm=${cola^^}
        colmt=`echo $colm | sed 's/ *$//g'` 
        if quant=$(grep -c "$colmt" $i); then
            if [ "$quant" -ge "$min" ]; then
                dir1="${i%.txt}"
                dir2="image/${dir1##*/}
            #passo4
                if [ ! -f "resultado/${i##*/}-$cola.pdf" ]; then
                    convert "$dir2" -deskew 40% "$WORK_DIR/$(basename -- $dir2)"
                
                #passo5
                    tesseract "$dir1" "$dir1" -l por --psm 1 pdf
                #passo6
                    cp "$dir1.pdf" "resultado/${i##*/}-$cola.pdf"
                fi
            fi
        fi
    done
done < $INPUT