
Inspirado poresta resposta do superusuárioEu escrevi o seguinte copy_library.sh
script, salvo na mesma pasta de um arquivo chamado library.bib
:
#!/bin/sh
while inotifywait -e close_write library.bib; do
cp -f ./library.bib ../other_place/ ;
echo "Library copied"
done
Se eu iniciar este script manualmente com ./copy_library.sh
o processo encerrado após a primeira cópia (que funciona com sucesso):
londonrob ~/mydir
> ./copy_library.sh
Setting up watches.
Watches established.
library.bib CLOSE_WRITE,CLOSE
Library copied
Setting up watches.
Watches established.
londonrob ~/mydir
>
e nenhuma outra alteração é rastreada. Tenho certeza de que devo fazer algo com esse script para que ele seja executado continuamente "em segundo plano" sem que eu precise iniciá-lo manualmente.
Mas o que?
Responder1
Na inotifywait
página de manual:
inotifywait espera com eficiência por alterações nos arquivos usando a interface inotify(7) do Linux. É adequado para aguardar alterações em arquivos de scripts de shell. Ele pode sair quando um evento ocorre ou executar e gerar eventos continuamente à medida que ocorrem.
e
-m, --monitor Em vez de sair após receber um único evento, execute indefinidamente. O comportamento padrão é sair após a ocorrência do primeiro evento.
EDIT: Eu tenho um log, que é anexado a cada 15 segundos. O script a seguir executa um loop while para cada linha gerada por inotifyread:
#!/bin/sh
inotifywait -e modify /tmp/modem_log.csv -m | while read line; do
echo "$line"
echo "Copy coperation here..."
done
No seu caso, você tem que alterar o evento (modificar) para close_write, é claro.