如何在Ansible'find'模块中使用通配符路径?
我正在尝试使用Ansible playbook从远程主机上的几个目录中删除剩余文件如何在Ansible'find'模块中使用通配符路径?,ansible,find,wildcard,glob,Ansible,Find,Wildcard,Glob,我正在尝试使用Ansible playbook从远程主机上的几个目录中删除剩余文件 /some_dir ├── dir_1 │ └── file_A ├── dir_2 │ └── file_B └── dir_3 └── file_C 例如,如果我使用shell脚本,我会使用简单的glob,比如rm-rf/some\u dir/dir\u*/file\u*,它足够具体。我想坚持最佳实践™ 尽管如此,我还是决定使用和模块的组合 任务: -名称:按模式查找要删除的文件 查找: 路
/some_dir
├── dir_1
│ └── file_A
├── dir_2
│ └── file_B
└── dir_3
└── file_C
例如,如果我使用shell脚本,我会使用简单的glob,比如rm-rf/some\u dir/dir\u*/file\u*
,它足够具体。我想坚持最佳实践™ 尽管如此,我还是决定使用和模块的组合
任务:
-名称:按模式查找要删除的文件
查找:
路径:“/some_dir/dir*/”
模式:“文件*
但是,通配符在find
的路径中似乎不起作用,它们被视为文本
有没有办法绕过这些限制
注:
我知道我可以递归地在某些目录中搜索文件[A-Z]
,但它可能会捕获/some目录/非常重要的东西/file\u 0
(如果所有其他方法都失败,我将使用该解决方案)
我可能可以使用shell命令或脚本在远程主机上使用shell扩展,然后解析其stdout以获取文件列表,但这听起来像是一种容易出错的黑客行为
在这种特殊情况下,我可以运行两个find
任务:在some\u dir
中查找所有dir\u*
,然后将它们用作路径列表,以查找文件
,但由于此任务是更大的真实剧本的一部分,因此对于在任意位置使用通配符的路径来说太复杂了(/some_dir/dir.*/other/cruft/subdirs/*.cache
)
直接使用ansible不可能。您必须使用shell
命令:
---
- name: TEST
hosts: host1
gather_facts: False
tasks:
- name: shell
shell: "ls -1 /some_dir/dir_*/*"
register: result
- name: debug
debug:
var: result.stdout
但是fileglob
在本地主机上扩展,而我需要在远程主机上扩展。啊,好吧,我错过了。据我所知,您将不得不执行两项任务或使用命令。编辑了我的答案。谢谢,但正如我在笔记的第2页中提到的,这对我来说太难了。正如第34条所述,“您不应解析ls
输出”