README (4617B)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | ╻ ╻┏━╸┏┓╻╺┳┓╻ ╻ ┃╻┃┣╸ ┃┗┫ ┃┃┗┳┛ ┗┻┛┗━╸╹ ╹╺┻┛ ╹ -- by z3bra =========================== (W)atch (EN)tire (D)irector(Y) is an inotify-based directory watcher. With wendy, you can watch event in directories or files, and launch a specific command when an event occurs. The program is made the more simple possible, to leave the room to unlimited uses. Be creative ! Every event raised by inotify is handled. Just sum them up to watch multiple event at the same time. Here is the full table: (see inotify(1) for a better explanation of those events) IN_ACCESS ........ 1 IN_MODIFY ........ 2 IN_ATTRIB ........ 4 IN_CLOSE_WRITE ... 8 IN_CLOSE_NOWRITE . 16 IN_OPEN .......... 32 IN_MOVED_FROM .... 64 IN_MOVED_TO ...... 128 IN_CREATE ........ 256 IN_DELETE ........ 512 IN_DELETE_SELF ... 1024 IN_MOVE_SELF ..... 2048 To watch for both creation AND deletion in a directory, do some math: 256 + 512 = 768 then, pass that value to wendy so that she can watch after both of them (did I just say 'she'?). You can also note that you can specify file/directory names either using the -f flag, or from stdin (in this case, the -f flag must be omited). As a hidden feature, the watch mask is changed everytime the -m flag is provided, and the inotify watches are set everytime the -f flag is given. So you can wathc different mask on different file using the same command, and that's pretty cool! Here are some examples: # Tell me whenever I have a new mail wendy -m 256 -d ~/mails/INBOX/new -t 60 -e espeak "You got a new mail" # On-the-fly recompilation wendy -l | grep -i close_write IN_CLOSE_WRITE ... 8 find -name "*.c" | wendy -m 8 -q -d ~/src/dev/program/ -t 1 -e make # Get up to date with community based projects wendy -m 770 -f /mnt/nfs/project/ -t 30 -e popup 'project updated' # watch creation in the directory, and modifications on a file wendy -m 256 -f ./my_dir -m 8 -f file.txt -e echo awesome! FAQ === > Can it work on a folder and sub folders ? It does not. inotify does not handle this by default, and implementing this would make the code grow in complexity to a level I don't want to reach. But you could do something like: $ tree . ├── a ├── b │ ├── c │ └── d └── e 5 directories, 0 files $ find a -type d | wendy -m 256 -v | cut -f2 That will add a watch to each directory, and output the names of the file created (eg: "a/b/newfile"). --- > Can you explain why this exists? Doesn't inotifywait (from inotify-tools) do > this exact same thing? When I first started wendy, I was not aware of inotifywait. It was just a good programming exercise. With the time, I found wendy more and more useful, and added a few options to make it faster and more 'generic' (It was first created to watch my mail directory, to alert me of new mails). Today, I know that inotifywait can be used for everything wendy does Anyway, I still prefer using wendy because of this: * inotifywait exits upon event reception [1] * inotifywait does not allow to launch a command on event reception [2] * inotifywait with multiple events can end in an infinite line [3] * inotifywait cna't read names from stdin * inotifywait only handle the file modification event (eg, wendy can use the IN_ONLYDIR mask) * inotifywait exits right when an event occur, wendy can treat all queued events at a specific period * inotify-tools : 164kb against 12kb for wendy (ok, not that relevant) * I like the name 'wendy' better [1] I'm aware of the '--monitor' flag, but the only way to exec a command with this is a pain that implies read, a while loop and so on. [2] In fact, you can, by doing "inotifywait -e <event> && command", and wrapping it in a while loop. Well, don't forget to add a test to see if your file still exists, to avoid infinite buggy loops. You'll end up with something like: while test -e ~/path/to/my/file; do inotifywait -e <event> ~/path/to/my/file && command done Good luck with this, I prefer "wendy -m <mask> -e command" [3] one flag per event. events written in words: inotifywait -e access -e create -e delete -e modify -e attrib /path/to/file I prefer wendy -m 774 -f ~/path/to/my/file --- > Would you prefer to fight one horse sized duck, or 10 duck sized horses ? Regarding size and number, I'd rather fight horses. Ducks are silly creatures. |