Como ser notificado quando um arquivo específico é deletado no Linux?

2

Estou procurando uma maneira de monitorar um arquivo e acionar um evento assim que o arquivo for removido. Uma vez removido, vou substituir / copiar um novo arquivo e reiniciar o monitor.

Por exemplo,

watch "/tmp/fileToMonitor.txt"

// file deleted by some process
cp new_file "/tmp/fileToMonitor.tx"

// watch file again (repeat same steps..)

Como posso fazer isso com um script bash? Isso é possível?

    
por user797717 12.07.2015 / 17:37

1 resposta

4

Você pode fazer isso com inotifywait utility (do pacote inotify-tools , pelo menos no Debian).

inotifywait pode pegar nomes de eventos como argumentos e esperar que eles aconteçam no arquivo ou diretório monitorado, antes de retornar. No seu caso, você precisaria usar o evento delete_self , para indicar que você deseja que o programa retorne quando o arquivo monitorado for excluído.

Então, para copiar um novo arquivo assim que /tmp/fileToMonitor.txt for removido, você faria:

inotifywait -e delete_self "/tmp/fileToMonitor.txt" && cp new_file "/tmp/fileToMonitor.txt"

Se você quiser começar a monitorar novamente, coloque isso em loop:

while true ; do
  inotifywait -e delete_self "/tmp/fileToMonitor.txt" \
    && cp new_file "/tmp/fileToMonitor.txt"
done
    
por 12.07.2015 / 19:04