【发布时间】:2019-01-20 16:03:22
【问题描述】:
我正在尝试使用 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 中似乎不起作用,它们被视为文字。
有没有办法解决这些限制?
注意事项:
- 我知道我可以在
some_dir中递归搜索file_[A-Z],但随后它可能会捕获/some_dir/very_important_stuff/file_0(如果一切都失败了,我将采用该解决方案) - 我可能可以使用 shell 命令或脚本在远程主机上使用 shell 扩展,然后解析其标准输出以获取文件列表,但这听起来像是一个容易出错的 hack
- 在这种特殊情况下,我可以运行两个
find任务:在some_dir中查找所有dir_*,然后将它们用作paths的列表以查找file_*s,但是由于此任务(s ) 作为更大的真实剧本的一部分,对于在任意位置具有通配符的路径使用它会太复杂 (/some_dir/dir_*/other/cruft/subdirs/*.cache)。
【问题讨论】:
标签: ansible find wildcard glob