In an earlier installment of Linux Fu, I mentioned how you can use inotifywait
to efficiently watch for file system changes. The comments had a lot of alternative ways to do the same job, which is great. But there was one very easy-to-use tool that didn’t show up, so I wanted to talk about it. That tool is entr
. It isn’t as versatile, but it is easy to use and covers a lot of common use cases where you want some action to occur when a file changes.
inotify2 Articles
Linux Fu: Watch That Filesystem
The UNIX Way™ is to cobble together different, single-purpose programs to get the effect you want, for instance in a Bash script that you run by typing its name into the command line. But sometimes you want the system to react to changes in the system without your intervention. For example, you might like to watch a directory and kick off some program automatically when a file appears from a completed FTP transaction, without having to sit there and refresh the directory yourself.
The simple but ugly way to do this just scans the directory periodically. Here’s a really dumb shell script:
#!/bin/bash while true do for I in `ls` do cat $I; rm $I done sleep 10 done
Just for an example, I dump the file to the console and remove it, but in real life, you’d do something more interesting. This is really not a good script because it executes all the time and it just isn’t a very elegant solution. (If you think I should use for I in *
, try doing that in an empty directory and you’ll see why I use the ls
command instead.)