重要的是要立即注意“监视目录的脚本”有很多变体,我意识到 inotify-tools 是理想的,但是这个特定的脚本用于监视 vboxsf 文件系统,不幸的是它不转发文件系统通知。该脚本是一种刷新文件的技巧,因此单独运行的守护进程会注意到它。
下面的脚本是一种妥协。我花了很长时间处理各种问题
- 正确的
查找
参数 查找
路径和- 触摸找到的文件的时间。
目标是识别新文件,触摸它以便单独运行的守护进程注意到它并随后处理它。问题是,好吧,它吞噬了 cpu 并且大概是从 find 中获取的。我想帮助找到一种更有效的方法来做到这一点。
虽然不是必需的,但要进行全面测试,需要一个已安装的 vboxsf 文件系统,并像这样运行 inotifywait inotifywait -m/watches/watchdir -e attrib
在以某种方式刷新文件之前,主机端的文件创建不会导致 guest 端的 ATTRIB 通知——在这种情况下,此 hack 使用“touch
”
thedir=/watches/watchdir
touch_me() {
if [ "${newbie}" ]; then
# echo "got this: ${newbie}"
touch -d '-120 seconds' "${newbie}"
fi
}
while true
do
newbie=`find $thedir/* -type f -mmin 0.1 2>/dev/null`
touch_me
done
最佳答案
像 sysdig 这样的工具可能会有帮助。 例如,以下命令显示在/tmp 中打开的每个文件:
sysdig evt.type=open and fd.name contains /tmp
此工具非常复杂但功能强大,通过阅读其手册,您可能会找到解决问题的有效方法。
关于linux - 监视新文件目录的 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37202127/