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

Transformando o Linksys WRT54G2 V1 em bridge, repetidor

Recuperando partições deletadas

How to install YUM and other rpm packages on VIOs and AIX manually