Auto copia arquivos quando adicionados ao compartilhamento de rede

1

Eu tenho um compartilhamento de rede no meu sistema para o qual o nosso scanner de plotadora envia seus arquivos digitalizados. Como posso escrever um script para copiar automaticamente os arquivos adicionados recentemente para outra pasta?

    
por Brian 18.05.2011 / 17:56

2 respostas

2

cron e rsync seriam minhas ferramentas de escolha. Eu vou supor que você montou este compartilhamento de rede através de naultilus ou outro método. Existem outras maneiras melhores de montar as coisas do que através de Naultilus (especialmente para fins de script), mas vou deixar isso para você:

Abra um terminal e execute crontab -e . Você pode ser solicitado a selecionar um editor ( nano é mais fácil). Lá você quer adicionar uma nova linha parecida com esta:

*/5 * * * * rsync -avz ~/.gvfs/remote/path/ ~/scans/

Control-x, depois y para salvar.

Isso sincronizará tudo de ~/.gvfs/remote/path/ a ~/scans/ a cada cinco minutos. Não fará o download novamente de itens que não foram alterados. Claro que você vai querer editar os caminhos e você pode querer mudar o tempo da declaração cron. Você pode querer limitá-lo a horas extras ou executá-lo com mais frequência.

    
por Oli 18.05.2011 / 18:12
0
  • Deixe $share conter o caminho para o seu "compartilhamento (...) para o qual o nosso scanner de plotadora envia seus arquivos digitalizados"
  • Deixar $afolder conter o caminho para sua "outra pasta"

Minha abordagem simplista seria manter uma lista de arquivos em $share . Escreva um script que verifique se os arquivos atualmente em $share estão nessa lista. Não, eles devem ser novos e devem ser movidos. Em seguida, adicione este script a cron , executando-o regularmente.

Deixe $filelist conter o caminho para a lista de arquivos.

Script (não testado - apenas um modelo):

#!/bin/bash

...variables as discussed....
filelist=/some/path/to/the/aforementioned/filelist

find "$share" -type f >> /tmp/foundfiles
while read fnd; do  #walk files in folder
    isinlist=""
    while read listitem; do  #walk listitems
        if [ "$fnd" -ef "$listitem" ]; then
            echo "$fnd Allready in list."
            isinlist="inlist"
        fi
    done < "$filelist"
    if [ ! -n "$isinlist ]; then
        echo "$fnd" >> "$filelist"
        cp "$fnd" to "$afolder"
    fi
done < /tmp/foundfiles
rm /tmp/foundfiles
exit 0

Existem ferramentas que fazem isso para você, como o rsync. Mas talvez você queira adicionar uma customização personalizada.

    
por con-f-use 18.05.2011 / 18:10