Renomenado vários arquivos pdf com o título correto
Autor: Edipo G | Publicado: 2013-08-20T23:15:00-03:00


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:


&nbsp;[tux@linux Books]$ pdfinfo TLCL-13.07.pdf Title:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The Linux Command LineAuthor:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; William ShottsCreator:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriterProducer:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LibreOffice 3.5CreationDate:&nbsp;&nbsp; Sat Jul&nbsp; 6 19:15:58 2013Tagged:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; noPages:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 537Encrypted:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; noPage size:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 612 x 792 pts (letter)File size:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2119958 bytesOptimized:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; noPDF version:&nbsp;&nbsp;&nbsp; 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 qTitle:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //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:&nbsp;&nbsp;&nbsp;&nbsp; " 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/shfor i in `find ./*pdf`; do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TITLE=$(pdfinfo $i | sed q| sed -e 's/Title:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //g')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mv $i "$TITLE".pdfdone

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:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //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.