我不喜欢inotifytools
其中包括inotifywait
. 我建议用户在使用它时要格外小心,因为在移动(从和到)目录的递归监视方面是完全错误的。
为了表达我的意思,让我们考虑一下您目前遇到的相关情况;目录移动。说,我们正在看 /foo/bar:
在 上mv /foo/bar /choo/tar
,即使在移出(重命名?)/foo/bar
到 后/choo/tar
,它也会继续错误地报告/choo/tar
事件/foo/bar
。这是无法接受的!它不应继续监视已移出根监视路径的目录。而且,更糟糕的是,它继续使用不存在的陈旧路径报告它。
此外,为什么move
事件报告为create
?离谱!Amove
与 a 完全不同create
!Amove
是 a move
,它必须报告为 a move
。遗憾的是,inotifytools
它非常受欢迎,而毫无戒心的用户却没有意识到它的谬误。
现在我已经发泄了挫败感(尽管这很重要),让我们帮助解决您的情况。
运行蓬松:终端:1
root@six-k:/home/lab/fluffy# fluffy | \
while read events path; do \
if ! echo $events | grep -qie "ISDIR"; then \
echo "$events $path"; \
fi
done
重现你的情况:终端:2
root@six-k:/tmp# pwd
/tmp
root@six-k:/tmp# mkdir test
root@six-k:/tmp/test# ls -l
total 0
root@six-k:/tmp/test# mkdir -p d1/dd1
root@six-k:/tmp/test# echo "This file will be moved" | cat >> d1/dd1/f1
root@six-k:/tmp/test# mkdir -p d2/
root@six-k:/tmp/test# ls -l d2
total 0
root@six-k:/tmp/test# fluffyctl -w ./d2
root@six-k:/tmp/test# mv d1 d2/
root@six-k:/tmp/test# ls -lR d1
ls: cannot access d1: No such file or directory
root@six-k:/tmp/test# ls -lR d2
d2:
total 4
drwxr-xr-x 3 root root 4096 Mar 18 20:03 d1
d2/d1:
total 4
drwxr-xr-x 2 root root 4096 Mar 18 20:04 dd1
d2/d1/dd1:
total 4
-rw-r--r-- 1 root root 24 Mar 18 20:04 f1
root@six-k:/tmp/test# echo "Events will be produced on this moved file" | cat >> d2/d1/dd1/f1
root@six-k:/tmp/test# cat d2/d1/dd1/f1
This file will be moved
Events will be produced on this moved file
root@six-k:/tmp/test# echo "New files are also watched in the moved dir" | cat >> d2/d1/dd1/f2
root@six-k:/tmp/test# cat d2/d1/dd1/f2
New files are also watched in the moved dir
root@six-k:/tmp/test# fluffyctl -I d2
root@six-k:/tmp/test# fluffy exit
事件日志:终端:1
root@six-k:/home/lab/fluffy# fluffy | \
> while read events path; do \
> if ! echo $events | grep -qie "ISDIR"; then \
> echo "$events $path"; \
> fi
> done
OPEN, /tmp/test/d2/d1/dd1/f1
MODIFY, /tmp/test/d2/d1/dd1/f1
CLOSE_WRITE, /tmp/test/d2/d1/dd1/f1
OPEN, /tmp/test/d2/d1/dd1/f1
ACCESS, /tmp/test/d2/d1/dd1/f1
CLOSE_NOWRITE, /tmp/test/d2/d1/dd1/f1
CREATE, /tmp/test/d2/d1/dd1/f2
OPEN, /tmp/test/d2/d1/dd1/f2
MODIFY, /tmp/test/d2/d1/dd1/f2
CLOSE_WRITE, /tmp/test/d2/d1/dd1/f2
OPEN, /tmp/test/d2/d1/dd1/f2
ACCESS, /tmp/test/d2/d1/dd1/f2
CLOSE_NOWRITE, /tmp/test/d2/d1/dd1/f2
IGNORED,ROOT_IGNORED,WATCH_EMPTY, /tmp/test/d2
IGNORED, /tmp/test/d2/d1
root@six-k:/home/lab/fluffy#
与 inotifytools 不同,fluffy
忠实地报告事件!
我希望这个例子足以让你为你的用例加强它。干杯!