Obtém fotos de uma Câmera Digital organizando em Subdiretórios e Renomeando
Publicado por Wagner Macêdo 15/09/2008
[ Hits: 6.576 ]
Esse é um script para obter fotos (e vídeos) de uma câmera e copiar renomeando pela hora da foto (ex: '2008-09-13_03,47,13.jpg') e guardando num subdiretório referente ao mês (ex: '2008-09 Setembro').
Foi feito de maneira que se possa integrar ao Gerenciador de Mídia do KDE3 (não testei no KDE4). Usa KDialog para interagir com o usuário.
Algumas considerações:
-A câmera deve poder funcionar como um disco externo.
-Tentei arrumar e comentar ao máximo o código.
#!/bin/bash
## Script que serve para obter fotos de uma câmera digital. É feito para se
## integrar ao Gerenciador de Mídia do KDE3 (não foi testado no KDE4).
## Para integrar entre em:
## 'Centro de Controle (kcontrol)' > 'Periféricos' > 'Mídia de Armazenamento'
##
## Códigos de saída (exit status code):
## 0 (sucesso) / 1 (erro) / 2 (cancelado)
##
## Autor: Wagner Luís de A. M. Macêdo (wagnerluis1982@gmail.com)
# Teste se há um parâmetro passado
if [ -z "$1" ]
then
kdialog --title="Parâmetro faltando" --error \
"Não foi passado nenhum parâmetro!
Exemplo: $0 media:/sdb1"
exit 1
fi
# Variável para guardar o dispositivo
dispositivo=$1
# Montar o dispositivo
kio_media_mounthelper -m "$dispositivo"
# Essa funcão encontra o caminho real do ponto de montagem, passando como
# parâmetro uma URI do tipo kioslave
# $temp_realdir Arquivo temporário que guarda o retorno do comando
# em formato hal
realdir() {
temp_realdir="/tmp/realdir.temp"
dcop kded mediamanager properties "$dispositivo" > "$temp_realdir"
head -n 7 "$temp_realdir" | tail -n 1
}
# Funcao para desmontar o dispositivo e finalizar o script
# @$1 Status de saida (0-sucesso/1-erro)
# @$2 Dispositivo a desmontar
finaliza() {
kio_media_mounthelper -s "$dispositivo"
exit "$1"
}
# Variável recebe o caminho do ponto de montagem real
pontomontagem=`realdir "$dispositivo"`
# Testa se a URI passada retornou um ponto de montagem
if ! mountpoint -q "$pontomontagem"
then
# Se o arquivo de retorno da função realdir() conter somente 1 linha,
# então o parâmetro passado é inexistente ou incorreto
if [ `wc -l "$temp_realdir"` = 1 ]
then
kdialog --title "Parâmetro incorreto" --error \
"Parâmetro incorreto
Deve ser passado uma URI do tipo 'media:/sdb1'"
else
kdialog --title "Mídia não está montada" --error \
"Não foi possível encontrar um ponto de montagem para o \
$dispositivo
Provavelmente houve algum erro ao montar"
fi
finaliza 1
fi
# Funcao para pesquisar por arquivos na mídia montada, pegar os meses pertencente a
# esses arquivos para criar os diretórios referente a cada mês (ex: 2008-09 Setembro)
# no destino especificado pelo usuário e copia as fotos renomeando no formato:
# '2008-09-13_22,13,51.ext'
#
# @$1 Diretório de destino
pesquisar_copiar() {
# Todos os arquivos encontrados na mídia montada (que sejam fotos ou vídeos)
temp_encontrados="/tmp/encontrados.temp"
# Pesquisa por fotos e vídeos, redireciona a saída para um arquivo temporario
find "$pontomontagem" -regextype posix-egrep -type f -iregex ".*.jpg$|.*.mpg$" \
-print0 > "$temp_encontrados"
# Variável recebe parâmetro de diretório de destino
dest=$1
# Array para guardar os nomes dos meses, o primeiro valor está vazio
# para que o mês comece do valor [1] e não precise somar 1 quando usar
nome_meses=("" "Janeiro" "Fevereiro" "Março" "Abril" "Maio" "Junho"
"Julho" "Agosto" "Setembro" "Outubro" "Novembro" "Dezembro")
# Pegar tamanho total dos arquivos a copiar
total=`du -c --files0-from="$temp_encontrados" | tail -n 1 | cut -f 1`
# Usado para o diálogo de progresso
dcopRef=`kdialog --title "Copiando" --progressbar "Copiando os arquivos para o diretório de destino. Aguarde!" $total`
dcop $dcopRef showCancelButton true
# Cria subdiretórios de acordo com o mês da foto e copia as fotos
xargs -0 -a "$temp_encontrados" ls -b | \
while read arquivos
do
# Ação para quando o botão cancelar for pressionado
if [ `dcop $dcopRef wasCancelled` = true ]
then
break
fi
# Pega a extensão original do arquivo
extensao=`echo "$arquivos" | awk -F . '{print $NF}'`
# Como será o nome do arquivo quando copiado
nome_arquivo=`echo "$arquivos" | xargs -I "{}" stat -c %y "{}" \
| xargs -I "{}" date +%F_%H,%M,%S -d "{}"`
# Pega o ano e mês. Ex: '2008-09'
ano_mes=`echo $nome_arquivo | cut -d _ -f 1 | cut -d - -f "1 2"`
# let 10# - Maneira de resolver o problema do shell interpretar
# os números resultantes do mês (01, 02,...) como octais,
# quando chegasse em 08, daria um erro.
let mes=10#`echo $ano_mes | cut -d - -f 2`
# Diretório de destino da foto dessa iteração do while
copiar_para="$dest"/"$ano_mes ${nome_meses[$mes]}"
# Se diretório não existir, cria um
test -d "$copiar_para" || mkdir "$copiar_para"
# Para onde a foto será copiada
arquivo_dest="$copiar_para"/"$nome_arquivo"."$extensao"
# Tamanho em bytes da foto dessa iteração
tamanho=`du "$arquivos" | cut -f 1`
# Copia a foto dessa iteração
cp --preserve=timestamps "$arquivos" "$arquivo_dest"
# Valor incrementado do tamanho da foto para subir a barra de progresso
inc=$((`dcop $dcopRef progress` + $tamanho))
# Define novo número para a barra de progresso
dcop $dcopRef setProgress $inc
done
# Testa se o botão cancelar foi pressionado para retornar o código de saída correto
if [ `dcop $dcopRef wasCancelled` = true ]
then
dcop $dcopRef close
finaliza 2
else
dcop $dcopRef close
fi
}
# Diálogo para escolher o diretório de destino
if ! destino=`kdialog --title "Escolha o diretório de destino" --getexistingdirectory ~/Fotos`
then
# Se ao escolher o diretório de destino o usuário cancelar, o script finaliza
kdialog --title "Cancelado" --msgbox "Cópia cancelada!"
finaliza 2
else
# Chamada da função pesquisar_copiar
pesquisar_copiar "$destino"
# Mensagem de sucesso
kdialog --title "Sucesso" --msgbox \
"Suas fotos e/ou vídeos foram copiados com sucesso"
finaliza 0
fi
themepack2txz - Extrair arquivos themepack e criar um pacote TXZ com as imagens
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









