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

时间:2019-01-20 16:03:23

标签: ansible find wildcard glob

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

/some_dir
├── dir_1
│   └── file_A
├── dir_2
│   └── file_B
└── dir_3
    └── file_C

例如,如果我使用shell脚本,我将使用rm -rf /some_dir/dir_*/file_*之类的简单glob,它足够具体。不过,我还是想坚持使用Ansible最佳实践™,所以我决定结合使用findfile模块。

tasks:
  - name: Find files to remove by patterns
    find:
      paths: "/some_dir/dir_*/"
      patterns: "file_*"

但是,通配符似乎在find的{​​{1}}中不起作用,它们被视为文字。

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

注意:

  1. 我知道我可以在paths中递归搜索file_[A-Z],但随后它可能会捕获some_dir(如果其他所有方法都失败,我会采用该解决方案)
  2. 我可能可以使用Shell命令或脚本在远程主机上使用Shell扩展,然后解析其stdout以获取文件列表,但这听起来像是容易出错的hack
  3. 在这种情况下,我可以运行两个/some_dir/very_important_stuff/file_0任务:在find中查找所有dir_*,然后将它们用作some_dir的列表来查找{{1 }},但是由于此任务是更大的真实游戏书的一部分,因此使用带有通配符的任意位置(paths)的路径将过于复杂。

1 个答案:

答案 0 :(得分:0)

不能直接与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