Monitor Folder Contents with launchd - Including Subfolders?
WatchPaths doesn't appear to be able to watch a sub-directory recursively, so the best you can do with it is watch a single directory's activities. You might want to take a look at Folder Actions, they're discussed in detail in this blog post titled: Setup OS X Folder Actions to Know When a File is Added as well.

Another alternative is to use a CLI tool that's available in Homebrew via the brew install fswatch command. fswatch is a cross platform implementation that works on most flavors of *NIX includes macOS.


  The FSEvents monitor, available only on OS X, has no known
  limitations, and scales very well with the number of files being
  observed.


Example

Here I've created a sub-directory called ~/somedir. I then invoked `fswatch against  this directory:

$ mkdir ~/somedir
$ fswatch /some/dir


Now if we start adding files and sub-directories fswatch will notify:

$ touch ~/somedir/afile
fwatch msg&gt;&gt; /Users/joeuser/somedir/afile

$ mkdir ~/somedir/anotherdir
fswatch msg&gt;&gt; /Users/joeuser/somedir/anotherdir

$ touch ~/somedir/anotherdir/afile
fswatch msg&gt;&gt; /Users/joeuser/somedir/anotherdir/afile


The above can be adapted for use in a shell script which can take whatever other actions you require when any changes are detected against the directory tree that fswatch is monitoring.

Other Examples

To act on file system activity you can use one of these 2 patterns:

$ fswatch -0 path | while read -d "" event \
  do \
    // do something with ${event}
  done


Or this:

$ fswatch -o path | xargs -n1 -I{} program


References


fswatch
Is there a command like “watch” or “inotifywait” on the Mac?