Sempre tenho um problema quando descarrego as fotos de uma câmera digital, como os arquivos são muito grandes tenho que converter para um tamanho menor no gimp para poder enviar por e-mail, ou postar aqui no site, fora ter que organizar em pastas com data e nome do evento.
Para automatizar esse processo fiz um shellscript usando zenity e o ImageMagic. A única coisa que você precisa alterar para usar é a pasta destino das fotos na variável destinoFotos logo no início do script.
O que o script faz é pedir a pasta de origem das fotos, descrição e data do evento. Com isso ele vai montar a seguinte estrutura na pasta de destino:
/pasta destino/ano/mes/dia/descricao do evento/originais
/thumbnails
O código segue abaixo, fique a vontade para modificar.
#!/bin/bash
# Desenvolvido por Guilherme Jr. <http://www.guilhermejr.net/>
# Caminho da pasta destino das fotos
destinoFotos=/DADOS/fotos
# Função da mensagem de cancelamento
cancelamento() {
zenity --info --text "Operação cancelada!";
exit 0;
}
# Caminho da pasta onde estãs as fotos
caminho=$(zenity --file-selection --directory --title="FOTOS")
# Se cancelar operação
if [ -z $caminho ]; then
cancelamento
fi
# Descrição do evento
descricao=$(zenity --entry --text "Descrição do evento:" --title="FOTOS")
# Se cancelar operação
if [ -z $descricao ]; then
cancelamento
fi
# Data do evento
data=$(zenity --calendar --text "Selecione data do evento:" --date-format=%d-%m-%Y --title="FOTOS")
# Se cancelar operação
if [ -z $data ]; then
cancelamento
fi
# Pega o dia mês e ano
dia=$(echo $data | cut -d'-' -f1)
mes=$(echo $data | cut -d'-' -f2)
ano=$(echo $data | cut -d'-' -f3)
sizeof() { du -s "$1" | cut -f1; }
running(){ ps $1 | grep $1 >/dev/null; }
# Total a copiar (em bytes)
TOTAL=$(sizeof "$(echo $caminho)")
# Checa se existe a pasta do ano do evento se não existir cria
if [ ! -d $destinoFotos/$ano ]; then
mkdir $destinoFotos/$ano
fi
cd $destinoFotos/$ano
# Checa se existe a pasta do mês do evento se não existir cria
if [ ! -d $mes ]; then
mkdir $mes
fi
cd $mes
# Checa se existe a pasta do dia do evento se não existir cria
if [ ! -d $dia ]; then
mkdir $dia
fi
cd $dia
# Cria pasta com o nome do evento
mkdir "$descricao"
cd "$descricao"
# Cria pastas
mkdir originais
mkdir thumbnails
cd originais
cp -r "$(echo $caminho)/"* . &
CPPID=$!
pastaDestinoFotos=$(pwd)
(
# enquanto o processo de cópia estiver rodando
while running $CPPID; do
# quanto já foi copiado?
COPIADO=$(sizeof "$(echo $pastaDestinoFotos)")
# qual a porcentagem do total?
PORCENTAGEM=$((COPIADO*100/TOTAL))
# envia a porcentagem para o dialog
echo $PORCENTAGEM
# aguarda até a próxima checagem
sleep 1
done
# cópia finalizada, mostra a porcentagem final
echo 100
) | zenity --progress --percentage=0 --auto-close --text "Copiando fotos... "
TOTAL=$(ls | wc -l)
I=0
(
for img in $(ls | egrep ".+\.[Jj][Pp][Ee]?[Gg]") ; do
convert "$img" -thumbnail 512x384 ../thumbnails/"$img"
I=$((I+1))
PORCENTAGEM=$((I*100/TOTAL))
echo $PORCENTAGEM
done
echo 100
) | zenity --progress --percentage=0 --auto-close --text "Gerando thumbnails... "
zenity --info --text "CONCLUÍDO"