script pdf para txt e algo mais complexo

1. script pdf para txt e algo mais complexo

alexandre rangel
spock211

(usa Debian)

Enviado em 22/10/2019 - 22:28h

Boa noite pessoal !

Sou iniciante em shell script e tenho vários arquivos pdfs (mais de 1000) em uma pasta, só que o nome de cada arquivo não condiz com o conteúdo deles. O nome de cada um segue um padrão: "1_A_Fundamental_I_VA.pdf"
"1_A_Fundamental_I_VA(1).pdf"
"5_A_Fundamental_I_VA(2).pdf"
e por aí vai....

Dentro de cada arquivo pdf existe um campo chamado: 'Descrição: Teste de matemática 2' ou qualquer outro título semelhante a este.

Eu queria titular cada arquivo com essa descrição que existe dentro de cada arquivo. Tive a ideia de converter o pdf em txt com o pdftotext e depois extrair esse campo "Descrição" com o cat. Mas não consigo bolar um comando que concatene a conversão, a extração e depois a renomeação de cada arquivo correspondente.

Tentei o seguinte:

#!/bin/bash

#Converte todos os arquivos pdf da pasta em txt
for file in *.pdf; do pdftotext "$file" "$file.txt"; done

#Lista a descrição da atividade e a atribui a uma variável "$desc"
desc$=(cat '6_A_Fundamental_II_VA.pdf.txt' | sed -n '3 p' | cut -c14-45) >> novos.txt


Alguém teria uma ideia para eu colocar em prática o poderoso shell script ? Existe uma forma de automatizar o script para que o campo "descrição" em cada arquivo txt seja extraído e guardado ou atribuído a uma variável e depois o arquivo pdf original seja renomeado com essa "descrição" ? Dessa forma cada arquivo pdf terá o título dessa "descrição".

Só consegui arranhar a superfície até agora.






  


2. Re: script pdf para txt e algo mais complexo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/10/2019 - 23:37h

spock211 escreveu:

Boa noite pessoal !

Sou iniciante em shell script e tenho vários arquivos pdfs (mais de 1000) em uma pasta, só que o nome de cada arquivo não condiz com o conteúdo deles. O nome de cada um segue um padrão: "1_A_Fundamental_I_VA.pdf"
"1_A_Fundamental_I_VA(1).pdf"
"5_A_Fundamental_I_VA(2).pdf"
e por aí vai....

Dentro de cada arquivo pdf existe um campo chamado: 'Descrição: Teste de matemática 2' ou qualquer outro título semelhante a este.

Eu queria titular cada arquivo com essa descrição que existe dentro de cada arquivo. Tive a ideia de converter o pdf em txt com o pdftotext e depois extrair esse campo "Descrição" com o cat. Mas não consigo bolar um comando que concatene a conversão, a extração e depois a renomeação de cada arquivo correspondente.

Tentei o seguinte:

#!/bin/bash

#Converte todos os arquivos pdf da pasta em txt
for file in *.pdf; do pdftotext "$file" "$file.txt"; done

#Lista a descrição da atividade e a atribui a uma variável "$desc"
desc$=(cat '6_A_Fundamental_II_VA.pdf.txt' | sed -n '3 p' | cut -c14-45) >> novos.txt


Alguém teria uma ideia para eu colocar em prática o poderoso shell script ? Existe uma forma de automatizar o script para que o campo "descrição" em cada arquivo txt seja extraído e guardado ou atribuído a uma variável e depois o arquivo pdf original seja renomeado com essa "descrição" ? Dessa forma cada arquivo pdf terá o título dessa "descrição".

Só consegui arranhar a superfície até agora.

Dica:
#!/bin/bash
for file in *.pdf; do
pdftotext "$file" texto.txt;
#Pega o campo de interesse, Tudo que tem depois de "Descrição:" e Troca "espaço" por "_"
desc=$(awk -F":" '/Descrição:/ {gsub(" ", "_") ; print $2}' texto.txt)
#Teoricamente o NOME que você deseja está na var desc, é só renomear o arquivo $file
echo -e " Confirma Alteração? \n De: \"$file\"\n Para: \"$desc\"\n"
read -p " [S|N]: " -n1 RESP;echo;
[[ "$RESP" =~ (S|s) ]] && mv $file $desc.pdf || echo " $file não renomeado."
done
OBS.: Não testei!!!!
Importante: echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


3. Re: script pdf para txt e algo mais complexo

alexandre rangel
spock211

(usa Debian)

Enviado em 24/10/2019 - 13:11h

msoliver escreveu:

spock211 escreveu:

Boa noite pessoal !

Sou iniciante em shell script e tenho vários arquivos pdfs (mais de 1000) em uma pasta, só que o nome de cada arquivo não condiz com o conteúdo deles. O nome de cada um segue um padrão: "1_A_Fundamental_I_VA.pdf"
"1_A_Fundamental_I_VA(1).pdf"
"5_A_Fundamental_I_VA(2).pdf"
e por aí vai....

Dentro de cada arquivo pdf existe um campo chamado: 'Descrição: Teste de matemática 2' ou qualquer outro título semelhante a este.

Eu queria titular cada arquivo com essa descrição que existe dentro de cada arquivo. Tive a ideia de converter o pdf em txt com o pdftotext e depois extrair esse campo "Descrição" com o cat. Mas não consigo bolar um comando que concatene a conversão, a extração e depois a renomeação de cada arquivo correspondente.

Tentei o seguinte:

#!/bin/bash

#Converte todos os arquivos pdf da pasta em txt
for file in *.pdf; do pdftotext "$file" "$file.txt"; done

#Lista a descrição da atividade e a atribui a uma variável "$desc"
desc$=(cat '6_A_Fundamental_II_VA.pdf.txt' | sed -n '3 p' | cut -c14-45) >> novos.txt


Alguém teria uma ideia para eu colocar em prática o poderoso shell script ? Existe uma forma de automatizar o script para que o campo "descrição" em cada arquivo txt seja extraído e guardado ou atribuído a uma variável e depois o arquivo pdf original seja renomeado com essa "descrição" ? Dessa forma cada arquivo pdf terá o título dessa "descrição".

Só consegui arranhar a superfície até agora.

Dica:
#!/bin/bash
for file in *.pdf; do
pdftotext "$file" texto.txt;
#Pega o campo de interesse, Tudo que tem depois de "Descrição:" e Troca "espaço" por "_"
desc=$(awk -F":" '/Descrição:/ {gsub(" ", "_") ; print $2}' texto.txt)
#Teoricamente o NOME que você deseja está na var desc, é só renomear o arquivo $file
echo -e " Confirma Alteração? \n De: \"$file\"\n Para: \"$desc\"\n"
read -p " [S|N]: " -n1 RESP;echo;
[[ "$RESP" =~ (S|s) ]] && mv $file $desc.pdf || echo " $file não renomeado."
done
OBS.: Não testei!!!!
Importante: echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


Muito obrigado pela dica, por enquanto estou nessa versão e ainda tentando melhorar...

#!/bin/bash
# Converte os pdfs em texto, mantendo todos os pdfs originais na pasta
for file in *.pdf; do pdftotext "$file" texto.txt;

#Pega o campo de interesse, tudo que tem depois de "Descrição:" e troca "espaço" por "-"
desc=`awk -F":" '(gsub (" ", "-"))' texto.txt | grep "Descrição" | sed -n '3 p'`

Renomeia todos os pdfs com a variável $desc que tem a "descrição completa" de cada arquivo.
mv "$file" "$desc.pdf"
done




4. Re: script pdf para txt e algo mais complexo

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 24/10/2019 - 13:20h

Isso deve facilitar, não precisa fazer conversão:
https://pdfgrep.org/



5. Re: script pdf para txt e algo mais complexo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 24/10/2019 - 18:10h


spock211 escreveu:
Muito obrigado pela dica, por enquanto estou nessa versão e ainda tentando melhorar...

#!/bin/bash
# Converte os pdfs em texto, mantendo todos os pdfs originais na pasta
for file in *.pdf; do pdftotext "$file" texto.txt;

#Pega o campo de interesse, tudo que tem depois de "Descrição:" e troca "espaço" por "-"
desc=`awk -F":" '(gsub (" ", "-"))' texto.txt | grep "Descrição" | sed -n '3 p'`

Renomeia todos os pdfs com a variável $desc que tem a "descrição completa" de cada arquivo.
mv "$file" "$desc.pdf"
done

spock211, Reveja comando abaixo:
desc=`awk -F":" '(gsub (" ", "-"))' texto.txt | grep "Descrição" | sed -n '3 p'`

Att.: Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts