2

I have written a bash script to monitor a particular directory "/root/secondfolder/" the script is as follows:

#!/bin/sh

while inotifywait -mr -e close_write "/root/secondfolder/"
do
    echo "close_write"
done

When I create a file called "fourth.txt" in "/root/secondfolder/" and write stuff to it, save and close it, it outputs the following but it does not echo "close_write":

/root/secondfolder/ CLOSE_WRITE,CLOSE fourth.txt

can someone point me in the right direction?

mib1413456
  • 337
  • 1
  • 3
  • 16

2 Answers2

6

You are not far away from solution. If you want to use inotifywait in your while statement you should not use -m option. With this option inotifywait never end because it's the monitor option. So you never go into the while.

This should work :

#!/bin/sh

while inotifywait -r -e close_write "/root/secondfolder/"
do
    echo "close_write"
done
kranteg
  • 931
  • 1
  • 7
  • 15
  • Thank you for your response but I found another solution that allows me to monitor the directory indefinitely and get the output. – mib1413456 Jul 07 '14 at 03:28
  • This is suboptimal because there may be multiple close_writes before the next inotifywait process starts. It's better to use inotifywait's --monitor mode if you care about processing every single message. – Phob Dec 05 '20 at 06:59
6

It turns out all I had to do was pipe the command into a while loop:

!/bin/sh

inotifywait -mqr -e close_write "/root/secondfolder/" | while read line
do
echo "close_write"
done
mib1413456
  • 337
  • 1
  • 3
  • 16