The find
模块可能已损坏。这excludes
参数仅适用于最终结果集中的项目,并且not到中间目录。
也就是说,如果您有这样的目录结构:
toplevel/
foo/
testfile1.txt
bar/
testfile2.txt
并来自父母toplevel
您运行这样的任务的目录:
- find:
paths: toplevel
recurse: true
excludes: foo
register: results
您的结果集将如下所示:
toplevel/bar/testfile2.txt
toplevel/foo/testfile1.txt
将其与设置进行比较file_type: any
, 像这样:
- find:
paths: toplevel
file_type: any
recurse: true
excludes: foo
register: results
在这种情况下,结果集将如下所示:
- `toplevel/bar`
- `toplevel/bar/testfile2.txt`
- `toplevel/foo/testfile1.txt`
注意toplevel/bar
包含在结果中,但是toplevel/foo
被排除在外。那是因为:
- We set
file_type: any
,这意味着我们想要查找目录和文件。
- 这使得
toplevel/foo
结果集的一部分。
- 我们从结果中排除任何带有基本名称的内容
foo
如果您简单地使用,您将获得更灵活的行为find
命令:
- name: exclude an intermediate directory with find command
command: >-
find toplevel -name foo -prune -o -type f -print
register: result
这将返回以下项目:
toplevel/bar/testfile2.txt
我已经放置了上面的可运行版本在 github 上 https://github.com/larsks/so-example-63578783.