Ansible 删除目录中包含特定名称的所有文件
我有以下目录,它有以下文件:Ansible 删除目录中包含特定名称的所有文件,ansible,Ansible,我有以下目录,它有以下文件: /tmp/test/file1.txt /tmp/test/file1.txt.backup /tmp/test/mywords.csv 如何使用文件模块删除文件1*文件?因此,我不在linux终端前面,但如果您试图确保只删除属于文件的内容,则可以使用此模块。应该可以,但你可能需要调整它 find . -name files1* -type f -exec basename {} \; | xargs rm 编辑:Ansible 2.0现在已经发布,所以前面的答
/tmp/test/file1.txt
/tmp/test/file1.txt.backup
/tmp/test/mywords.csv
如何使用
文件
模块删除文件1*
文件?因此,我不在linux终端前面,但如果您试图确保只删除属于文件的内容,则可以使用此模块。应该可以,但你可能需要调整它
find . -name files1* -type f -exec basename {} \; | xargs rm
编辑:Ansible 2.0现在已经发布,所以前面的答案应该有效,现在您也可以了。注意:只有在本地运行Ansible时,此选项才有效:
- file:
path: "{{item}}"
state: absent
with_fileglob:
- /tmp/test/file*
原始答复:
我目前找不到一种方法来实现这一点,但是如果您可以拖放到shell以收集与模式匹配的文件列表并将其保存为变量,那么您可以使用_项循环文件模块
Ansible 2.0将包括一个“查找”模块,可为您获取列表:
这里有几个任务应该在ansible 2.0中完成,但我没有安装它,所以我没有测试它,可能访问find模块的结果不正确
- find:
paths: "/tmp/test"
patterns: "file*"
register: result
- file:
path: "{{item.path}}" #correction code
state: absent
with_items: result.files
您可以使用如上所示的find+file模块,但在ansible<2.0上,我遇到了以下错误:
ERROR: find is not a legal parameter in an Ansible task or handler
可以使用以下命令(您可以将-regex替换为-name“files1*”):
我正在使用ansible(IT编排工具)。它们提供在远程主机上执行某些操作的模块。其中一个模块是文件模块。如何使用该模块删除文件。我想使用它,因为它是幂等的,而不是真正的linux命令。我有一个linux命令,它已经通过执行->rm name*Cool.将其删除。。谢谢只需等待2.0正式发布,然后我就可以使用它。第二种解决方案可行,但第一种(使用fileglobs)是不正确的,因为fileglobs似乎只在本地文件系统上工作。有关更多信息,请参阅。您是正确的Karlos。我已经更新了我的答案来说明这一点。我已经更新了我的答案来包括新的fileglob循环,它在单个任务中完成这一点。
- name: delete files
shell: 'find /tmp/test/ -maxdepth 1 -type f -regex "/tmp/test/file1.*" -exec rm -rf {} \;'
- hosts: srv-lnx
gather_facts: no
tasks:
- shell: "find /var/tmp/collect -maxdepth 1 -type f | awk -F/ '{print $NF}'"
register: result
- debug: var=result
- fetch: src=/var/tmp/collect/{{ item }} dest=/appl/collect/data flat=yes
with_items: result.stdout_lines