Às vezes, precisamos realizar tarefas repetitivas em nosso PC, que com o tempo se tornam tediosas. Em certos casos, podemos facilitar nosso trabalho fazendo uso de scripts que funcionam para nós.
Hoje estou escrevendo para mostrar a vocês um script bash que resolveu uma necessidade: copiar novas imagens da minha câmera digital de um cartão SD para o PC.
Localização:
Sempre que eu tinha novas imagens para baixar no meu computador, eu fazia o seguinte:
1. Abra o diretório onde tenho as imagens classificadas em subdiretórios.
2. Crie um novo subdiretório com o nome da data atual, no formato aa.mm.dd
3. Vá para o subdiretório criado na vez anterior e veja qual é a última imagem salva.
4. Copie as novas imagens do cartão SD para o diretório recém-criado.
Isso não leva mais de um minuto, mas é mais fácil para o processo ser feito apenas inserindo o cartão.
solução:
Crie um script bash que faça o seguinte:
1. Verifique na inicialização se o cartão SD está montado. Caso contrário, termina.
2. Vá para o diretório principal de imagens e encontre a última. Salve seu nome em uma variável.
3. Compare a data atual com o último diretório, se forem diferentes, crie um novo diretório com o nome da data atual no formato "aa.mm.dd".
4. Vá para o último diretório (não o novo, mas um mais antigo) e salve em uma variável o nome do último arquivo transferido na vez anterior.
Nesta etapa, é necessário filtrar o nome do arquivo para poder compará-lo com os novos arquivos do cartão em um futuro próximo. Os arquivos têm o seguinte formato: xxx_xxxx.ee Onde: x = dígito 0 a 9 e eee = extensão (JPG, MOV). Por exemplo: 100_5684.JPG, 100_5699.MOV. Após o filtro, o nome permanece xxxxxxx Portanto, no exemplo acima, teríamos: 1005684, 1005699.
Como o diretório pode conter outros tipos de arquivos ou com nomes alterados, o filtro é usado.
5. Mova para o cartão e filtre os arquivos como no ponto anterior.
6. Compare os arquivos no cartão com a variável que contém o último arquivo transferido na vez anterior (ponto 4) e copie os arquivos nomeados para o diretório recém-criado maior do que a variável. (já que os nomes são apenas números).
7. Abra o diretório que contém as novas imagens com o gerenciador de arquivos.
Em seguida, mostro o script com comentários que explicam como funciona. Esclareço que não sou um programador e isso me deu várias dores de cabeça até que o fizesse funcionar, especialmente quando tive que filtrar os nomes para o loop "for".
#! / bin / bash ### --- VERIFICAR SE O SD ESTÁ MONTADO --- ### SD = / media / KODAK / DCIM / 100Z8612 if [[-d $ SD]]; então ### --- CRIAR DIRETÓRIO --- ### #Leia o diretório de imagens e crie outro com o nome da # data atual e permissões 755 se ele não existir. cd ~ / Pictures / kodak ULTDIR = `ls -1 | tail -n1` # último diretório da lista. DATE = `data +% y.% M.% D` #Data atual no formato AA.MM.DD if [" $ LASTDIR "! =" $ DATE "]; então mkdir -vm 755`data +% y.% m.% d` # criar diretório com a data atual fi ### --- VER ÚLTIMO ARQUIVO DE $ ULTDIR --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | tail -n1 | cut -c1-3,5-8` # veja a última imagem com o nome xxx_XXXX.eee .eee = extensão de arquivo (JPG ou MOV) # Para garantir que o script funcione após ser executado: # 100_9999.eee -> 101_0000. eee e não há erros # CORTAR para que fique no formato xxxXXXX ### --- MOVER PARA O ÚLTIMO DIRETÓRIO DA LISTA --- ### # OU PARA O RECENTEMENTE CRIADO, SE # cd foi CRIADO .. ULTDIR = `ls -1 | tail -n1` # vai novamente porque caso contrário leva o ULTDIR anterior de if cd / media / KODAK / DCIM / 100Z8612 ### --- FILTER os arquivos em SD --- ### FILTER = `ls -1 [ 0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - COMPARAR NOVOS ARQUIVOS COM NOME MAIOR DO QUE O ÚLTIMO --- ### para I em $ FILTER do N = `echo $ I | cut -c1-3,5-8` #Nome do corte if [["$ ULTIMG" -lt "$ N"]]; então cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR #Abra o novo diretório com Thunar else exit 0 fi exit 0
Finalmente, para fazê-lo funcionar, adicionei-o ao aplicativo "Drives e mídia removíveis" do Xfce no menu
Configurações → Gerenciador de configurações do Xfce 4 → Mídia e unidades removíveis → Câmeras
usando a opção de importação de imagem. Quando insiro o cartão, uma caixa de diálogo pergunta se desejo importar as imagens. Ao aceitar, o script é executado.
Bem, é isso. Desculpem a bagunça do texto, é meu primeiro post e não sei tabular o script na hora de editá-lo. Espero que seja útil a alguém pelo menos ter uma ideia e adaptá-la a cada caso particular.
Muito interessante Joaquín, uma boa ideia é fazer upload do script na pasta onde é mais fácil compartilhar o código, e como você diz pode ser adaptado a outras necessidades e se aprende um pouco mais a usar o bash.
Saudações !!!
Concluído, adicionado em http://paste.desdelinux.net/4737
Thanks!
Ao copiar uma fotografia que já está no diretório, não indica que já existe e dá a opção de substituí-la ou não copiá-la?
De qualquer forma é muito útil, pois faz tudo automaticamente
Oi. Na verdade, ele não copia imagens repetidas, apenas as ignora. A ideia era justamente copiar os novos arquivos sem a necessidade de interação do usuário. Além disso, a menos que você adicione imagens mais de uma vez por dia, o script copia os novos arquivos para um novo diretório. Eu explico brevemente:
Hoje é 10/03/13, crio um diretório chamado 13.03.10/100/4440 e copio algumas imagens ou vídeos (MOV) dentro: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
(Os 4443 e 4444 ausentes foram apagados com a câmera, o último é 4445).
Então, suponha que eu use o script em 01/04/13 e tenha novas imagens no cartão. O script cria um diretório chamado 13.04.01 e dentro das novas imagens / vídeos cujo nome é maior que "4445"; porque ele lê o diretório 13.03.10 e a última imagem é 100_4445.JPG. Se eu executar novamente o script com novas imagens do cartão no mesmo dia, elas serão adicionadas ao diretório 13.04.01. Nenhum é sobrescrito.
Espero ter esclarecido um pouco minha ideia 🙂
E você não conhece o Rapid Photo Downloader? Acho que faz tudo isso e muito mais.
O que quero dizer é que o homem magrinho fez isso sozinho, ele teria se divertido, eu acho, e isso pode servir a outra pessoa
Oi. Não sabia e parece bom pelo que vi na internet, mas na verdade o script cumpre perfeitamente o que preciso; que é inserir o cartão e ter todos os arquivos copiados automaticamente.
Também me ajudou a aprender um pouco mais porque obviamente não funcionou da primeira vez; Erros ocorreram e muito se aprendeu com eles.
Não pretendia mostrar o script para resolver problemas de outras pessoas, existem aplicativos como os que você mencionou que são mais gerais. Eu compartilhei para você ler e como referência para criar coisas novas usando loops (neste caso "para") e expressões regulares (variáveis "ULTIMG" e "FILTER" no script)
Parece útil, guardo para o caso de precisar um dia. Obrigado.
Thanks!
mas para isso já temos o grsync
Sim, mas acho que o rsync é mais usado para backups. Nunca o vi, mas é um aplicativo que devemos levar em consideração e aprender com todos nós.
Eu não sabia que havia uma interface gráfica para rsync.
Nossa, acho o código muito interessante, muito útil. continue assim. 😀
Vou guardá-lo para o caso de precisar.
Saudações.
Obrigado!.