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

问题描述 投票:0回答:1

我正在尝试使用 Ansible playbook 从远程主机上的多个目录中删除剩余文件。

/some_dir ├── dir_1 │   └── file_A ├── dir_2 │   └── file_B └── dir_3 └── file_C
例如,如果我使用 shell 脚本,我会使用像 

rm -rf /some_dir/dir_*/file_*

 这样的简单 glob,它足够具体。不过,我想坚持最佳 Ansible 实践™,所以我决定结合使用 
find
file
 模块。

tasks: - name: Find files to remove by patterns find: paths: "/some_dir/dir_*/" patterns: "file_*"
但是,通配符在 

find

paths
 中似乎不起作用,它们被视为文字。

有什么方法可以解决这些限制吗?

备注:

    我知道我可以在
  1. file_[A-Z]
     中递归地搜索 
    some_dir
    ,但随后它可能会捕获 
    /some_dir/very_important_stuff/file_Q
    (如果其他方法都失败,我将采用该解决方案)
  2. 我可以使用 shell 命令或脚本在远程主机上使用 shell 扩展,然后解析其标准输出以获取文件列表,但这听起来像是一个容易出错的 hack
  3. 在这种特殊情况下,我可以运行两个
  4. find
     任务:找到 
    dir_*
     中的所有 
    some_dir
    ,然后将它们用作 
    paths
     列表来查找 
    file_*
    ,但由于此任务作为更大的真实剧本的一部分,它太复杂了,无法用于任意位置带有通配符的路径(
    /some_dir/dir_*/other/cruft/subdirs/*.cache
    )。
ansible find wildcard glob
1个回答
2
投票
使用 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
    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.