Script para mover arquivos para o novo diretório periodicamente

0

Sou novo no Linux e estou procurando ajuda com um script. Estou usando o Resilio para fazer backup de fotos dos nossos iPhones. Eles vão para '/ media / data / phones / myiphone / resilio'

infelizmente, o resilio importa as fotos em suas pastas do iOS, e cada uma delas pode conter até 100 imagens por pasta. Quando uma pasta é preenchida, o iOS destruído faz uma nova pasta DCIM aleatória (100APPLE, etc), portanto, as pastas serão adicionadas ao diretório / resilio periodicamente conforme determinado pelo iPhone. Essa é a parte que estou achando difícil, pois não quero alterar o script toda vez que uma nova pasta DCIM é adicionada.

Gostaria de extrair fotos e vídeos em cada uma dessas pastas "iOS" e movê-las para um novo diretório único para que todas as fotos fiquem em uma pasta (desculpe, diretório):

/media/data/phones/myiphone/pics

Eu gostaria que isso fosse feito uma vez por dia.

(O diretório pics será então sincronizado com minha máquina windows onde eu faço minha edição de fotos, etc. mas essa não é a parte que eu preciso de ajuda.)

Se alguém pudesse me guiar através deste, do começo ao fim, incluindo como programar o script para ser executado, eu apreciaria tremendamente isso. Finja que você estava explicando para um kindergartner (quem pode ler e digitar).

Estou feliz em esclarecer qualquer coisa que não esteja clara. Thx !!

    
por mkinsocal 17.10.2017 / 20:13

3 respostas

1

Primeiro, escreva um script simples para mover a foto / vídeos para o diretório desejado. Algo como o seguinte, em um arquivo chamado "backupPhotos.sh". Eu devo supor que você sabe como usar um editor de texto.

#!/bin/bash

cd /media/data/phones/myiphone/resilio
find . -type f -exec mv {} ../pics \;

A primeira linha diz para executar este script usando / bin / bash (normalmente o shell padrão que você usa em uma janela de terminal). A linha que começa com "cd" altera o diretório de trabalho atual para o diretório onde suas fotos são salvas pelo Resilio. A última linha move todos os arquivos sob o diretório resilio para o diretório pics (somente os arquivos serão movidos "-type f", não a estrutura do diretório.

faça:

chmod 755 backupPhotos.sh
mkdir /media/data/phones/myiphone/pics

O comando chmod informa ao Ubuntu que o arquivo contém um script executável. O comando mkdir cria o diretório "pics" para armazenar as imagens / vídeos. Se você já tem o diretório pics, então você não precisa fazer o mkdir.

Experimente o script digitando o comando

./backupPhotos.sh

no diretório em que você criou o arquivo. Por favor, tome precauções para garantir que você tenha as imagens salvas em algum outro lugar durante esta fase de teste, apenas no caso de algo dar errado. Depois de executar o script, todos os diretórios em "resilio" devem estar vazios e todas as fotos / vídeos devem estar no diretório "pics".

Quando tiver certeza de que isso está funcionando corretamente, você poderá programá-lo para ser executado usando o crontab. Antes de fazer o próximo comando, você deve identificar seu editor de texto preferido digitando

export EDITOR=gedit

Isto irá definir o seu editor preferido para "gedit" (temporariamente). Substitua "gedit" por qualquer editor de texto que você goste e tenha instalado. Então digite o comando

crontab -e

Isso colocará você no seu editor favorito com um provável arquivo crontab vazio. Deve haver algum texto no arquivo crontb, mas todos devem ser comentados com o caractere "#". Você adicionará uma linha no final do arquivo para agendar a execução do novo script. A linha será:

0 5 * * * /path_to_script_directory/backupPhotos.sh

onde "path_to_script_directory" é o caminho completo para onde o script está localizado (algo como / home / mkinsocal). Os três asteriscos significam executar o script todos os dias. O "0 5" significa executá-lo em 0 minutos após as 5 da manhã. Observe que você deve ter o computador funcionando às 5 da manhã todos os dias para que isso funcione. Quando terminar de adicionar a linha ao seu arquivo crontab, salve-o e pronto.

    
por John Anderson 19.10.2017 / 05:26
0

Suponho que você tenha uma estrutura de pastas como /media/data/phones/myiphone/pics/100APPLE , /media/data/phones/myiphone/pics/101APPLE e assim por diante. Isso pode ser resolvido com globbing . Globs basicamente usam caracteres especiais como curingas.

  • * significa qualquer caractere, qualquer número de vezes, incluindo nenhum.
  • significa qualquer caractere, pelo menos uma vez.
  • [abc] corresponderá a um caractere listado, aparecendo pelo menos uma vez.
  • [a-z] corresponderá a um caractere no intervalo.

Assim, ls [0-9]foo corresponderá a 1foo e 9foo , mas não a 12foo . *foo corresponderá a ambos.

Assim, o glob mais fácil pode ser ??? APPLE, para combinar qualquer pasta com 8 caracteres no nome, terminando em APPLE, mas com três caracteres iniciais desconhecidos.

A correspondência de qualquer arquivo interno pode ser feita com *, por exemplo ls ???APPLE/* listará todos os arquivos em todas as pastas.

Eu usei o ls como exemplo aqui, mas o globbing é manipulado pelo shell, e você pode igualmente copiar os arquivos em vez de listá-los - ou listá-los, e executar um loop for.

Outra abordagem seria usar o find, como sugere @Drymartini. Em resumo, você tem várias possibilidades.

    
por vidarlo 17.10.2017 / 20:37
-3

Você pode fazer isso com man find

Algo como isso ajudaria:

find ./ -iname *.jp?g -exec cp '{}' photosDir/ \;
    
por Drymartini 17.10.2017 / 20:32