Renomeia os arquivos dentro do diretório em tempo real

2

Eu configurei o dropbox em minha máquina servidora descentralizada 12.04, ela foi sincronizada corretamente e eu a configurei para que eu possa enviar fotos por e-mail usando o aplicativo sendtodropbox.com. Estes todos sincronizam com a pasta dropbox localmente no meu host ~/Dropbox/Attachments/ .

Eu gostaria de fazer duas coisas:

  1. Eu gostaria de enviar e-mails para minhas fotos da caixa de depósito e depois sincronizá-los com o meu servidor.

  2. Em seguida, copie esses arquivos para a pasta do repositório de fotos do blog.

Os problemas que estou encontrando são:

  • Eu posso fazer um link simbólico para uma pasta fora da pasta Dropbox (para a pasta do repositório de fotos do meu blog), o único problema é que as fotos são enviadas por e-mail com um nome de arquivo, photo.jpg (obrigado, Apple!).

Isso significa que eu preciso de um script bash para renomear os arquivos com o nome photo.jpg para algo único quando forem criados.

Isso permitirá que eu faça o upload de mais de uma foto e seja capaz de diferenciar quais fotos são essas!

Eu posso criar um symlink com bastante facilidade, estou apenas lutando para encontrar uma solução que possa alterar os nomes dos arquivos em tempo real, pois eles são sincronizados por meio de dropbox down para h

    
por knishka 23.08.2012 / 01:09

2 respostas

0

A maneira mais fácil de fazer isso seria ter um trabalho cron renomeando seus arquivos. Assumindo que você não precisa de um acesso instantâneo às suas fotos e pode esperar um minuto (dê uma olhada: http://www.thegeekstuff.com/2011/07/cron- a cada 5 minutos / "> aqui se não estiver).

  1. Crie um script que mova photos.jpg da sua pasta dropbox para o seu repositório, salvando-o como year-month-day_hour_minutes_seconds.jpg . Crie um arquivo de texto chamado move_photos.sh no seu editor de texto favorito e cole essas linhas nele:

    #!/bin/bash
    date='date +%F"_"%H_%M_%S';
    mv /Dropbox/Photos/photo.jpg /path/to/repo/$date.jpg
    

    Obviamente, substitua /path/to/repo pelo caminho real do seu repositório.

  2. Torne o script executável:

    $ chmod +x move_photos.sh
    
  3. Crie um crontab

    $ crontab -e
    
  4. Adicione esta linha ao crontab:

    * * * * * ~/move_photos.sh
    
  5. Salve e feche a janela do editor do crontab.

Isso fará com que o script move_photos.sh seja executado a cada minuto. Como o nome do arquivo inclui segundos, nunca deve haver dois arquivos com o mesmo nome.

    
por 23.08.2012 / 05:16
0

Encontrei uma ferramenta interessante chamada incron , por isso a defini executando sudo apt-get install incron . Para simplificar, incron é:

This program is an "inotify cron" system. It consists of a daemon and a table manipulator. You can use it a similar way as the regular cron. The difference is that the inotify cron handles filesystem events rather than time periods.

Em seguida, criei um script simples:

#!/bin/bash
ls photo.JPG | while read a; do mv $a "$(echo "$a" | sed s/photo.JPG/"photo$(date +%a%b%d%H%M).jpg"/)"; done
mv photo* ~/Dropbox/Attachments /<photo repo>/

Coloco o script em ~/ e edito o arquivo /etc/incron.allow para incluir meu nome de usuário porque esses scripts e arquivos estão todos no meu diretório home. Em seguida, tenho que editar o arquivo de configuração do incron executando incrontab -e .

Aqui eu usei ~/Dropbox/Attachments/ IN_MOVED_TO ~/script.sh (porque a ação de um arquivo do Dropbox entrando no diretório é um movimento)

Isso está funcionando instantaneamente quando eu envio uma imagem do meu celular ao Dropbox agora. Eu também testei o incron com o root e meu nome de usuário para ter certeza de que funcionou, meu primeiro teste como meu usuário foi: incrontab -e adicione a configuração: ~/ IN_CREATE touch ~/test , depois eu vou para ~/ e execute >foo e test aparece.

Caso contrário, isso deve funcionar bem também!

    
por 23.08.2012 / 12:01