Grave metadados em PDF a partir do nome do arquivo usando Exiftool ou PDFtk

1

Eu tenho milhares de arquivos PDF nomeados no formato

Author Year Title of the book

Os dois primeiros espaços são relevantes: eles fazem uma pausa entre o Autor, o ano e o título. O título pode conter um número de espaço. Estou procurando um script para escrever o autor no campo meta author no PDF; o Título para o título e os metadados do ano para o ano. Exiftool parece ser o mais promissor de todas as ferramentas que eu olhei.

Vocês podem me ajudar?

    
por Dellu 25.02.2016 / 18:39

1 resposta

0

Algumas ferramentas de manipulação EXIF têm uma maneira interna de renomear arquivos baseados em dados EXIF, mas eu não conheço um que possa fazer o contrário. Então deixe o shell chamar o programa com as partes certas dos nomes dos arquivos. Aqui está um script que processa apenas um arquivo (passe o nome como o único argumento do script).

#!/bin/sh
title=${1##*/}
author=${title%% *}; title=${title#* }
year=${title%% *}; title=${title#* }
exiftool -Author="$author" -Title="$title" -CreateDate="$year" "$1"

Explicação: Eu uso construções de expansão de parâmetro para executar algumas processamento de string: coloque o nome base (após o último / ) em title ; coloque a peça no primeiro espaço em author e remova-a de title ; repita com o ano.

Para processar todos os arquivos em um diretório, coloque esse código em um loop.

#!/bin/sh
for filename in *\ *\ *.pdf; do
  title=${filename##*/}
  author=${title%% *}; title=${title#* }
  year=${title%% *}; title=${title#* }
  exiftool -Author="$author" -Title="$title" -CreateDate="$year" "$filename"
done

Para processar todos os arquivos em um diretório e seus subdiretórios de forma recursiva, use find .

find /path/to/top/directory -name '* * *.pdf' -type f -exec sh -c '
  for filename do
    …
  done
' _ {} +
    
por 25.02.2016 / 23:53