O script inotify para após a primeira alteração

O script inotify para após a primeira alteração

Inspirado poresta resposta do superusuárioEu escrevi o seguinte copy_library.shscript, 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.sho 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 inotifywaitpá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.

informação relacionada