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