Obtém fotos de uma Câmera Digital organizando em Subdiretórios e Renomeando
Publicado por Wagner Macêdo 15/09/2008
[ Hits: 6.357 ]
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
Tradutor: ept ( English to Portuguese )
fwgen - gerador de regras de firewall iptables
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
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)