linux - 监视新文件目录的 bash 脚本

标签 linux bash inotify

重要的是要立即注意“监视目录的脚本”有很多变体,我意识到 inotify-tools 是理想的,但是这个特定的脚本用于监视 vboxsf 文件系统,不幸的是它不转发文件系统通知。该脚本是一种刷新文件的技巧,因此单独运行的守护进程会注意到它。

下面的脚本是一种妥协。我花了很长时间处理各种问题

  1. 正确的查找参数
  2. 查找路径和
  3. 触摸找到的文件的时间。

目标是识别新文件,触摸它以便单独运行的守护进程注意到它并随后处理它。问题是,好吧,它吞噬了 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/

相关文章:

python - 在 Linux 上使用 headless Chrome 访问拒绝页面,而有头 Chrome 通过 Python 使用 Selenium 在 Windows 上运行

linux - 访问虚拟 linux 系统

linux - Grep 多个 bash 参数

Bash:按模式提取文件名并将它们插入数组

linux - bash中的换行符

inotify inotify_event 事件->名称为空

java - 无法启动 Tomcat 服务器

python - 在 Linux Mint 上安装 pyttsx3

c - inotify 无法对 IN_DELETE 使用react

c - 鉴于我打开了一个文件,有没有办法确定其他进程是否也打开了该文件