Obtém fotos de uma Câmera Digital organizando em Subdiretórios e Renomeando
Publicado por Wagner Macêdo 15/09/2008
[ Hits: 6.354 ]
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
Pingmon1.0 - Ping Timeout Monitor
BackUp Mensal de Relatórios Diários
Encerrar sessão no terminal com tempo definido
Shell Script para Guia Foca Linux
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI