首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >inotifywait未检测到新目录

inotifywait未检测到新目录
EN

Unix & Linux用户
提问于 2022-05-18 23:25:45
回答 1查看 185关注 0票数 0

下面的脚本监视目标目录中的close_write事件,并对文件进行处理。

代码语言:javascript
复制
#!/bin/bash

TARGET=/home/*/ftp/files

inotifywait -m -r -e close_write $TARGET |
        while read directory action file
        do
                if [[ "$file" =~ .*jpg$ ]] || [[ "$file" =~ .*mp4$ ]]
                then
                        # do sth with the file
                fi
        done

因此,现在它正在正确地监视close_write事件下的文件,例如/home/sammy/ftp/files/home/neo/ftp/files

我面临的问题是,一旦创建了一个新用户,比方说mike,那么手表似乎不再工作了,我将不得不重新执行脚本,以便它知道新用户的路径,即nohup进程需要被终止并再次运行。

有什么方法让inotifywait等着知道新创建的目录吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-05-18 23:52:01

使用-r,它会自动找到在它正在监视的目录下创建的新目录。但是在这里,它得到路径/home/sammy/ftp/files/home/neo/ftp/files (等等),而/home/mike不在它们的下面,所以不会被检测到。(请记住,在/home/*/ftp/files运行之前,是shell扩展了glob inotifywait。)

原则上,您可以查看整个/home,并手动忽略/home/*/ftp/files中没有的任何内容。但这将产生成堆的手表,并产生大量不必要的事件。

一个更好的主意是,除了/home目录之外,还可以监视/home/*/ftp/files,并在看到/home下添加的新子目录时重新启动手表。如果任何新用户总是立即创建ftp/files目录,那应该不会太糟糕。但是,您可能应该显式地等待新的ftp/files目录出现,这样您就不会陷入脚本在创建新ftp/files之前重置inotifywait的竞争,从而丢失它。

(尽管重新启动inotifywait创建了一个窗口,可以在其中创建一个新文件,但脚本却丢失了它。这样的东西可能会更安全地使用一些直接支持inotify的编程语言。)

另一种完全不同的方法是更改目录结构,这样相关的内容将在/home/$user/files/ftp中而不是/srv/ftp/$user中。然后,您只需在/srv/ftp上添加一个手表,就可以自动捕获新用户,而不会出现问题。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/703082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档