Ok, resolvi o problema com um script que gera um banco de dados de miniaturas. O ImageMagick deve estar instalado para o script ser executado. O script requer dois argumentos, especificando um caminho de foto de origem e um caminho de destino. Ele busca de forma recursiva Source para arquivos JPG e gera miniaturas orientadas corretamente com largura e qualidade definidas pelo usuário (basta alterar o JPG para outra coisa, se desejar; ele manipula todos os formatos de arquivo manipulados pelo IM). Ele gera dois bancos de dados de miniaturas:
(1) db in Target: as miniaturas são organizadas em uma estrutura de pastas AAAA / MM / DD com base nas datas originais do EXIF.
(2) db no Target.Mirror: os polegares são organizados em uma estrutura de pastas que espelha precisamente a estrutura da origem.
Você pode alterar facilmente o script para gerar apenas um db. Eu colo aqui apenas o núcleo do script, deixando de lado a verificação e manipulação de caminhos, manipulação de argumentos, mensagens de eco, comentários, etc. Os caminhos de Origem, Destino e Espelho devem ter um argumento "/".
#!/bin/bash
# The following variables have to be initialized
# Source=<path_to_source/>
# Target=<path_to_target/>
# Mirror=<Target.mirror/>
# Width=<Thumbnail width> (experiment with 368, 416, 512, 1024)
# Quality=<Thumbnail quality> (0% to 100%: 95% is fine, try 75%)
shopt -s globstar
cd "$Source"
for f in **
do
if ! ([[ -d "$f" ]]) && ([[ "$f" == *"JPG" ]] || [[ "$f" == *"jpg" ]])
then
echo -e " ${\e[0;32m}" $Source$f${\e[0m}
Date=$(identify -format "%[EXIF:DateTimeOriginal]" $f)
FolderName="$Target${Date:0:4}/${Date:5:2}/${Date:8:2}"
if ! [[ -d $FolderName ]]
then
mkdir -p "$FolderName"
fi
Filename="${f##*/}"
convert "$Source$f" -thumbnail $Width -quality $Quality -auto-orient \
"$FolderName/$Filename"
# to preserve profiles such as EXIF data, replace line above with the following:
#
# convert "$Source$f" -resize $Width -quality $Quality -auto-orient
# "$FolderName/$Filename"
#
# it takes a bit longer and thumbnails are bigger in size -- profiles use up
# to 60K
if ! [[ "${f%/*}" == "$f" ]]
then
if ! [[ -d "$Mirror""${f%/*}" ]]
then
mkdir -p "$Mirror${f%/*}"
fi
fi
cp "$FolderName/$Filename" "$Mirror$f"
fi
done
O banco de dados é realmente leve (com largura definida para 416 e uma qualidade de 95%, o tamanho do banco de dados é de cerca de 1% do original); cópias dele podem ser facilmente guardadas em um notebook ou em um telefone Android, e Shotwell navega rapidamente. Se o script for executado novamente com uma nova fonte (mas com o mesmo destino e espelhamento), os dbs existentes serão atualizados.
O que posso dizer - obrigado, Gnu e Linux!