我正在尝试使用 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
中似乎不起作用,它们被视为文字。有什么方法可以解决这些限制吗?
备注:
file_[A-Z]
中递归地搜索
some_dir
,但随后它可能会捕获
/some_dir/very_important_stuff/file_Q
(如果其他方法都失败,我将采用该解决方案)
find
任务:找到
dir_*
中的所有
some_dir
,然后将它们用作
paths
列表来查找
file_*
,但由于此任务作为更大的真实剧本的一部分,它太复杂了,无法用于任意位置带有通配符的路径(
/some_dir/dir_*/other/cruft/subdirs/*.cache
)。
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