How to execute a Folder Action or another Automator script when I make changes to a folder?

How to execute a Folder Action or another Automator script when I make changes to a folder? And by changes I mean not just deleting or inserting new file, the most important for me is when the content of a file is changed the action will be triggered.


Using launchd, you could save a property list like this in ~/Library/LaunchAgents/ and load it with something like launchctl load ~/Library/LaunchAgents/automator_test.plist or by logging out and back in.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>automator_test</string>
    <key>ProgramArguments</key>
    <array>     
        <string>automator</string>
        <string>/Users/username/Desktop/Test.workflow</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/Users/username/Desktop/</string>
    </array>
    <key>StartInterval</key>
    <integer>0</integer> <!-- run at most every 0 seconds, by default 10 -->
</dict>
</plist>

Launchd only detects changes to files when they are saved atomically (or deleted and recreated every time they are saved). Most OS X apps perform atomic saves, but for example TextMate and vim don't.


This kind of requirement goes beyond the simple fsevents hooks exposed as Folder Actions. I’d recommend using Paul Kim’s Hazel, which will allow you to create “watch and react” rules of almost unlimited granularity and complexity.