如何在Ansible'find'模块中使用通配符路径?

如何在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*,它足够具体。我想坚持最佳实践™ 尽管如此,我还是决定使用和模块的组合 任务: -名称:按模式查找要删除的文件 查找: 路

我正在尝试使用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*/”
模式:“文件*
但是,通配符在
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
    输出”