我正在尝试编写一个工具来自动检测任何文件添加或删除到特定目录。我知道inotify可以以最有效的方式完成这项任务,代码也会更短。但我不能在这里使用inotify,因为我在NFS目录上工作,其中inotify无法检测到任何目录更改。 (据我所知)。
这是我编写的用于监视任何目录的一些粗略代码,这在很多方面都很糟糕。此外,有时它会跳过一些事件。
while true
do
touch temp_fs_state.log
touch temp_1_fs_state.log
find . -type f -ls |awk '{print $NF}' >> temp_fs_state.log
sleep 1
find . -type f -ls |awk '{print $NF}' >> temp_1_fs_state.log
diffResult=$(diff temp_fs_state.log temp_1_fs_state.log |grep -E '<|>' )
echo $diffResult |grep -Fq '>'
if [ "$?" -eq 0 ];then
echo "`echo $diffResult | awk '{print $NF}'` ADDED to the target directory!!"
fi
echo $diffResult |grep -Fq '<'
if [ "$?" -eq 0 ];then
echo "`echo $diffResult | awk '{print $NF}'` DELETED to the target directory!!"
fi
rm -rf temp_fs_state.log temp_1_fs_state.log
done
当前解决方案未检测到某些文件。
sh monitor
./x9 DELETED to the target directory!!
./x11 ADDED to the target directory!!
./x13 ADDED to the target directory!!
./x14 ADDED to the target directory!!
./x15 ADDED to the target directory!!
./x17 ADDED to the target directory!!
./x17 DELETED to the target directory!!
使用其他更短或更智能的方法可以取得类似的结果吗? 我们可以确保没有跳过任何事件吗?
PS:请假设,此处不考虑CPU性能,因为它仅用于测试目的。