Renomenado vários arquivos pdf com o título correto

Eu tive que fazer o download de diversos arquivos pdf de um site, só que me deparei com um problema, os arquivos baixados tinham um nome diferente e nada prático, algo com B455049.pdf, apesar de no conteúdo dele estar marcado o título "Administrador Unix" por exemplo, como eu queria que cada arquivo tivesse o título correto, fiz um script para linux, não testei no Mac OS, que lê cada arquivo de um diretório, extrai o seu título e depois renomeia o arquivo com esse título, vou antes apresentar o que possibilita isso.

No linux verifique se você possui o utilitário pdfinfo, verique no seu gerenciador de pacotes.
Com o comando abaixo você lista uma série de informação sobre o arquivo pdf que são salvas quando se edita o arquivo:

 [tux@linux Books]$ pdfinfo TLCL-13.07.pdf
Title:          The Linux Command Line
Author:         William Shotts
Creator:        Writer
Producer:       LibreOffice 3.5
CreationDate:   Sat Jul  6 19:15:58 2013
Tagged:         no
Pages:          537
Encrypted:      no
Page size:      612 x 792 pts (letter)
File size:      2119958 bytes
Optimized:      no
PDF version:    1.4

Como vê o que nos interessa na saída do comando é a primeira linha iniciada por Title, depois disso vamos usar um comando para nos fornecer somente a primeira linha da saida do pdfinfo:

[tux@linux Books]$ pdfinfo TLCL-13.07.pdf |sed q
Title:          The Linux Command Line


O que fizemos acima foi redirecionar a saida do pdfinfo para o comando sed que com a opção q filtra a saida nos deixando somente a primeira linha. No caso agora queremos remover a primeira parte da saída do comando, o Title e o espaço em branco deixando assim somente o título do arquivo para podermos usar quando renomearmos o arquivo:

[tux@linux Books]$ pdfinfo TLCL-13.07.pdf| sed q| sed -e 's/Title:          //g'
The Linux Command Line


Agora temos somente o título do arquivo pdf, usamos mais uma vez o pipe e com o comando sed -e e os parametros, removemos a ocorrência de "Title:     " deixando somente o título, lembrando que o sed nesse caso só remove a ocorrência exata do que você colocar, tendo um espaço a mais ou a menos depois do "Title" influência o resultado.
Agora que temos tudo isso fica fácil montar nosso script, abaixo segue o código dele, repare no uso do comando mv para renomear o arquivo:

#!/bin/sh



for i in `find ./*pdf`; do
        TITLE=$(pdfinfo $i | sed q| sed -e 's/Title:          //g')
        mv $i "$TITLE".pdf
done

Usamos no laço for o comando find ./*.pdf para listar todos os arquivos do diretório corrente, isso gera um resultado que definirá quantos execuções o for fará, para 100 arquivos no diretório corrente, serão 100 iterações, cada iteração será passada para os comandos seguintes, na primeira linha após o for o resultado da sequência de comandos será armazenada na variável TITLE:

TITLE=$(pdfinfo $i | sed q| sed -e 's/Title:          //g')
Após isso com o comando mv usamos o nome de um arquivo que foi encontrado, com o uso da variável $i e alteramos seu nome para "$TITLE".pdf, nesse caso o título do arquivo que obtemos com pdfinfo, lembrando de adicionarmos nesse nome a extensão .pdf

Copie o conteúdo do script, salve em um arquivo, depois execute-o no terminal, ele alterará o nome de todos os arquivos no diretório corrente, excluindo subdiretórios.

Faça bom proveito.






























Comentários

Postagens mais visitadas deste blog

Recuperando partições deletadas

Windows 11 não conecta na rede 5G do synology router.

Transformando o Linksys WRT54G2 V1 em bridge, repetidor