Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Opera ubuntu
Por izaias
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Wagner Macêdo em 15/09/2008    [ 3611 hits ]

Login: wagnerluis1982, 5143 pontos

   


Descrição

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.

[ Download: obter-fotos.sh ]   [ Enviar nova versão ]

[ Esconder código-fonte ]

#!/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

Scripts recomendados
   Script Linux recomendado Instalador do MPlayer e mais algumas coisas
   Script Linux recomendado Utilitario de montagem
   Script Linux recomendado Lista de Vetores
   Script Linux recomendado Script para gravar CD
   Script Linux recomendado Manipulação dos arquivos criados pelo Motion

Comentários
Nenhum comentário foi encontrado.

Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.