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
' _ {} +