fileschanged is a GNU/Linux command-line utility that reports when files have been altered.
Go to the Download Area if you want to download the latest version of fileschanged.
This software is a client to FAM (File Alteration Monitor) servers (FAM, Gamin) that is now available in some distributions. Here's how the fileschanged FAM client works: you give it some filenames on the command line and then it monitors those files for changes. When it discovers that a file has been altered, it displays the filename on the standard-output.
Here's what the usage looks like:Usage: fileschanged [OPTION...] [FILE]... Monitors FILEs for alterations. Display the filenames of FILEs that were created, changed, deleted, started execution or finished executing. -s, --show=EVENT[,...] Display created, changed, deleted, executing, or executed files (Default is "created,changed" -a, --show-all Display all file events and the associated action -f, --files-to-monitor (Default) Monitor the FILEs on the command line -l, --filelist=FILE Monitor the list of filenames inside FILE -L, --dereference Don't monitor symlinks, monitor what's pointed to -r, --recursive Monitor subdirectories of directories -t, --timeout=N Delay showing changed files for N seconds (Def=2) -p, --display-action Display action when showing altered files -x, --exec=PROG Run PROG when file altered (PROG action filename) -?, --help Give this help list --usage Give a short usage message -V, --version Print program version FILEs must exist when monitoring begins, or they will not be monitored. Report bugs to <firstname.lastname@example.org>.
Here are some examples of how you can use fileschanged:
Example 1Monitoring your home directory for changed files....will monitor all files in your home directory, and all directories and subdirectories in it. For example if you were to receive mail, while you were monitoring your home directory you might see something like:[you@localhost you]$ fileschanged -r ~/[you@localhost you]$ fileschanged -r ~/ /home/you/mbox
Example 2Monitoring your log files. If a file repeatedly changes, it is repeatedly reported as being changed. fileschanged doesn't stop monitoring until you hit CTRL-C....will monitor the log file and whenever it changes, you'll see /var/log/messages listed as the log is updated periodically.[you@localhost you]$ fileschanged /var/log/messages /var/log/messages /var/log/messages /var/log/messages
Example 3Monitoring your kernel source code for changes....will monitor all .c and .h files below /usr/src/linux . If a new .c or .h file is created below /usr/src/linux, fileschanged will NOT monitor it because the find command didn't know about that new file when it ran initially. Notice that the recursive option to fileschanged is not used. That is because the find command supplies the source files to fileschanged. Another way to do it is like this:[you@localhost you]$ find /usr/src/linux/ -print | grep "\.[ch]$" | fileschanged -l-This command will report every changed .c or .h file, including any new source files that are created inside of the /usr/src/linux/ directory.[you@localhost you]$ fileschanged -r /usr/src/linux/ | grep "\.[ch]$"
Example 4You can also use fileschanged within shell scripts. Here's a useful one that monitors a directory and archives any new or changed files:#!/bin/sh if [ "x$1" == "x" ] ; then echo "Usage: `basename $0`
" exit 1 fi if [ ! -d $1 ]; then echo "ERROR: `basename $0`: $1 is not a directory!" exit 2 fi ./fileschanged -r $1 | while read file; do tar -uPvf /tmp/tmp.tar $file >/dev/null 2>/dev/null done exit 0
Example 5You can also use fileschanged as it's own script. Check out this script called monitor_logs.#!/usr/local/bin/fileschanged -l #monitor my web server logs /etc/httpd/logs/access_log /etc/httpd/logs/error_log #monitor XFree86 log for kicks /var/log/XFree86.0.log #we can't monitor /var/log/messages because we don't have permission. #FAM requires read permission on the file we want to monitor. #we'd have to run this script as root if we wanted to monitor that log file. #/var/log/messages
Some (maybe unexpected) limitations of fileschanged:
The remaining options are explained in info page for fileschanged.
- When in recursive mode, fileschanged will only report files that have changed, not directories.
- The file or directory that you want to monitor must exist at program start.
Does fileschanged seem useful to you?
For more detailed information, you may wish to consult the User's Manual.
Also visit the fileschanged project on Savannah to submit bugs or to find out more information about fileschanged.