首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >inotifywait等待忽略新目录

inotifywait等待忽略新目录
EN

Unix & Linux用户
提问于 2022-09-05 19:36:11
回答 1查看 127关注 0票数 2

我想忽略一个在启动inotifywait时还没有创建的目录。我有一个空目录test

代码语言:javascript
复制
ubuntu@foo:~$ ls -lah test/
total 8.0K
drwxrwxr-x  2 ubuntu ubuntu 4.0K Sep  5 20:00 .
drwxr-x--- 13 ubuntu ubuntu 4.0K Sep  5 19:56 ..

我以这样的方式启动inotifywait

代码语言:javascript
复制
ubuntu@foo:~$ inotifywait -mr -e CREATE -e MODIFY -e DELETE -e MOVE /home/ubuntu/test/ @/home/ubuntu/test/log
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.

然后,在另一个终端中,我创建了一个目录log并将一些内容放在那里:

代码语言:javascript
复制
ubuntu@foo:~/test$ mkdir log
ubuntu@foo:~/test$ cd log/
ubuntu@foo:~/test/log$ echo "foo" > foo

这是inotifywait输出:

代码语言:javascript
复制
/home/ubuntu/test/ CREATE,ISDIR log
/home/ubuntu/test/log/ CREATE foo
/home/ubuntu/test/log/ MODIFY foo

但是,如果我关闭脚本并再次启动它,并将更多的内容放入文件中,则不会触发任何事件。

是否有可能在inotifywait中忽略一个“即将创建”的-directory?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-09-06 09:39:49

通过用一个简单的模式(正则表达式)替换@排除前缀,--exclude选项很容易做到这一点。例如,

代码语言:javascript
复制
--exclude /home/ubuntu/test/log'通过添加一个$ (匹配的字符串结束),我们确保创建像test/log2这样的文件也不会被错误地匹配和排除。此外,在开始时添加一个^,以确保我们在更深的地方不匹配路径:--exclude '^'/home/ubuntu/test/log'排除目录就足以排除它下面的新文件,<#>除非目录已经存在,奇怪的是。为了应对这种情况,将$替换为替代的$或/,即($|/):--exclude '^'/home/ubuntu/test/log'($|/)'然而,测试似乎表明(对于我的版本3.14?)只使用最后一个--exclude选项,这是没有文档记录的,而且是出乎意料的。因此,如果要排除几个目录,则需要将它们合并到一个regexp中。如果您不熟悉语法,只需将列表放在^(...|...|...)($|/)中,这就不需要复杂了,例如:--exclude '^(/home/ubuntu/test/log|/home/abc/log|/usr/def)($|/)'如果路径包含特殊的regexp字符(如.[]^$()*+?|{}, ),则需要查找如何转义它们。通过添加一个D3 (匹配的字符串结束),我们确保创建像D4这样的文件也不会被错误地匹配和排除。此外,在开始时添加一个D5,以确保我们在更深的地方不匹配路径:A6排除目录就足以排除它下面的新文件,<#>除非目录已经存在,奇怪的是。为了应对这种情况,将D7替换为替代的D8或D9,即D10:A11然而,测试似乎表明(对于我的版本3.14?)只使用最后一个D12选项,这是没有文档记录的,而且是出乎意料的。因此,如果要排除几个目录,则需要将它们合并到一个regexp中。如果您不熟悉语法,只需将列表放在D13中,这就不需要复杂了,例如:A14如果路径包含特殊的regexp字符(如D15 ),则需要查找如何转义它们。

排除目录就足以排除它下面的新文件,<#>除非目录已经存在,奇怪的是。为了应对这种情况,将D7替换为替代的D8D9,即D10

A11

然而,测试似乎表明(对于我的版本3.14?)只使用最后一个D12选项,这是没有文档记录的,而且是出乎意料的。因此,如果要排除几个目录,则需要将它们合并到一个regexp中。如果您不熟悉语法,只需将列表放在D13中,这就不需要复杂了,例如:

A14

如果路径包含特殊的regexp字符(如D15 ),则需要查找如何转义它们。

通过添加一个D3 (匹配的字符串结束),我们确保创建像D4这样的文件也不会被错误地匹配和排除。此外,在开始时添加一个D5,以确保我们在更深的地方不匹配路径:

A6

排除目录就足以排除它下面的新文件,<#>除非目录已经存在,奇怪的是。为了应对这种情况,将D7替换为替代的D8D9,即D10

A11

然而,测试似乎表明(对于我的版本3.14?)只使用最后一个D12选项,这是没有文档记录的,而且是出乎意料的。因此,如果要排除几个目录,则需要将它们合并到一个regexp中。如果您不熟悉语法,只需将列表放在D13中,这就不需要复杂了,例如:

A14

如果路径包含特殊的regexp字符(如D15 ),则需要查找如何转义它们。

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

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

复制
相关文章

相似问题

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