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...
- Isso funcionará razoavelmente bem. Se você quiser ficar sofisticado, dê uma olhadafamoso.
- Adicione-o ao final
/etc/rc.local
ou crie scripts de inicialização adequados de acordo com o método padrão da sua distribuição. - A
--delete
opçãorsync
já 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