我想忽略一个在启动inotifywait时还没有创建的目录。我有一个空目录test:
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:
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并将一些内容放在那里:
ubuntu@foo:~/test$ mkdir log
ubuntu@foo:~/test$ cd log/
ubuntu@foo:~/test/log$ echo "foo" > foo这是inotifywait输出:
/home/ubuntu/test/ CREATE,ISDIR log
/home/ubuntu/test/log/ CREATE foo
/home/ubuntu/test/log/ MODIFY foo但是,如果我关闭脚本并再次启动它,并将更多的内容放入文件中,则不会触发任何事件。
是否有可能在inotifywait中忽略一个“即将创建”的-directory?
发布于 2022-09-06 09:39:49
通过用一个简单的模式(正则表达式)替换@排除前缀,--exclude选项很容易做到这一点。例如,
--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替换为替代的D8或D9,即D10:
A11
然而,测试似乎表明(对于我的版本3.14?)只使用最后一个D12选项,这是没有文档记录的,而且是出乎意料的。因此,如果要排除几个目录,则需要将它们合并到一个regexp中。如果您不熟悉语法,只需将列表放在D13中,这就不需要复杂了,例如:
A14
如果路径包含特殊的regexp字符(如D15 ),则需要查找如何转义它们。
通过添加一个D3 (匹配的字符串结束),我们确保创建像D4这样的文件也不会被错误地匹配和排除。此外,在开始时添加一个D5,以确保我们在更深的地方不匹配路径:
A6
排除目录就足以排除它下面的新文件,<#>除非目录已经存在,奇怪的是。为了应对这种情况,将D7替换为替代的D8或D9,即D10:
A11
然而,测试似乎表明(对于我的版本3.14?)只使用最后一个D12选项,这是没有文档记录的,而且是出乎意料的。因此,如果要排除几个目录,则需要将它们合并到一个regexp中。如果您不熟悉语法,只需将列表放在D13中,这就不需要复杂了,例如:
A14
如果路径包含特殊的regexp字符(如D15 ),则需要查找如何转义它们。
https://unix.stackexchange.com/questions/716235
复制相似问题