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:
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:
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:
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:
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.
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/shUsamos 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:
for i in `find ./*pdf`; do
TITLE=$(pdfinfo $i | sed q| sed -e 's/Title: //g')
mv $i "$TITLE".pdf
done
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
Postar um comentário