删除目录中包含特定名称的所有文件

时间:2015-08-21 18:05:26

标签: ansible-playbook

我有以下目录,它有以下

/tmp/test/file1.txt
/tmp/test/file1.txt.backup
/tmp/test/mywords.csv

How do I use the file component to just remove file1* files??

4 个答案:

答案 0 :(得分:22)

编辑:Ansible 2.0现已发布,因此上一个答案应该有效,您现在也可以loop over fileglobs。请注意,仅当您在本地运行Ansible时才有效:

- file:
    path: "{{item}}"
    state: absent
  with_fileglob:
    - /tmp/test/file*

原始答案:

我无法找到一种方法来执行此操作而不必删除shell,但是如果您可以转到shell来收集与模式匹配的文件列表并将其保存为变量,那么您可以循环带有with_items的文件模块

Ansible 2.0将包含一个“查找”模块,可以为您提供列表:http://docs.ansible.com/ansible/find_module.html

这里有几个应该在ansible 2.0中完成的任务,但是我没有安装它,所以我没有测试它,可能是错误地访问了find模块的结果。

- find:
    paths: "/tmp/test"
    patterns: "file*"
  register: result

- file:
    path: "{{item.path}}" #correction code
    state: absent
  with_items: result.files

答案 1 :(得分:1)

你可以使用如上所示的find + file模块,但是在ansible< 2.0我收到了这个错误:

ERROR: find is not a legal parameter in an Ansible task or handler

以下命令将执行(您可以将-regex替换为-name“files1 *”):

- name: delete files
  shell: 'find /tmp/test/ -maxdepth 1 -type f -regex "/tmp/test/file1.*" -exec rm -rf {} \;'

答案 2 :(得分:0)

所以我不在linux终端前面,但如果你试图确保只删除文件,你可以使用它。应该工作,但你可能需要调整它。

find . -name files1* -type f -exec basename {} \; | xargs rm

答案 3 :(得分:0)

- 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