Ajuda com script de diretório de observação

Ajuda com script de diretório de observação

Primeiro, devo observar que sou muito novo em escrever scripts, mas conheço o Ubuntu bem o suficiente para não me importar em sujar as mãos ...

Eu tenho um pequeno script, que faz uma simples observação de diretório e quando encontra um novo arquivo no diretório, copia esse arquivo para outro diretório. O script que estou usando é assim:

#!/bin/sh
#
sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Complete/ /media/complete/

enquanto [1]
fazer
  echo 'Assistindo diretório: '$WATCHED_DIR 'para novos arquivos'
  enquanto arquivo=$(inotifywait -q -e criar "$WATCHED_DIR" --format "%f")
  fazer
    echo 'Novo arquivo para enviar para moonback' $file
    notify-send -i "gtk-go-up" "Monitoramento de pasta completo" "Enviando arquivo $file"

    #rsync vai aqui
    sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Complete/ /media/complete/

    notify-send -i "gtk-home" "Monitor de pasta completo" "Arquivo carregado."
  feito
feito

É uma modificação de um script que encontrei aqui:http://www.webupd8.org/2010/11/script-to-watch-folder-and-upload-new.html

Tenho algumas perguntas sobre o roteiro. Em primeiro lugar... esta é a melhor maneira de fazer o que estou tentando fazer? Como eu disse, funciona bem, mas estou sempre aberto a novas ideias. Nota: o diretório de destino é um compartilhamento SMB em uma máquina Windows 7.

Segundo... qual seria a melhor maneira de executar esse script na inicialização? Neste momento, entrei na tela "Aplicativos de inicialização" e adicionei um novo registro que executa esta linha "gnome-terminal -e /script.sh" que funciona, mas não parece ideal. Tentei adicionar o script à pasta init.d e executar update-rc.d e adicionar o script a /etc/rc.local, mas nenhum deles funcionou (não recebi erros, mas o script não estava sendo executado após um reinício).

Por último... existe uma maneira de modificar esse script para que ele também seja excluído do destino quando excluído da origem? O script só é executado quando os arquivos são adicionados, não excluídos, e embora a parte rsync seja excluída do destino quando excluída da origem, isso não será feito até que um novo arquivo seja adicionado. (espero que esse parágrafo faça sentido).

Responder1

Para suas perguntas...

  1. Isso funcionará razoavelmente bem. Se você quiser ficar sofisticado, dê uma olhadafamoso.
  2. Adicione-o ao final /etc/rc.localou crie scripts de inicialização adequados de acordo com o método padrão da sua distribuição.
  3. A --deleteopção rsyncjá deveria fazer isso.

Responder2

Eu faria algo assim:

cd directory2watch
# watching SUBdirectories
inotifywait --monitor --recursive *|
        while read path action file
        do
                # To get an idea of possible actions that will be
                # reported:
                echo path=$path action=$action file=$file
                # Decide on a followup base on $action:
                case $action in
                  "DELETE") ...
                          ;;
                  "CLOSE_WRITE,CLOSE")
                          ...
                          ;;
                esac

        done

informação relacionada