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

use*_*693 15 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??
Run Code Online (Sandbox Code Playgroud)

Mil*_*eek 25

编辑:Ansible 2.0现已发布,所以之前的答案应该有效,你现在也可以循环遍历fileglobs.请注意,这仅适用于您在本地运行Ansible:

- file:
    path: "{{item}}"
    state: absent
  with_fileglob:
    - /tmp/test/file*
Run Code Online (Sandbox Code Playgroud)

原始答案:

我没有找到一种方法来做到这一点,而不是放到shell,但是如果你可以放到shell来收集与模式匹配的文件列表并将其保存为变量,那么你可以循环文件模块with 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
Run Code Online (Sandbox Code Playgroud)

  • 第二个解决方案有效,但第一个(带有fileglobs)是不正确的,因为fileglobs似乎只在本地文件系统上工作.有关详细信息,请参阅https://github.com/ansible/ansible/issues/10115. (4认同)

bra*_*a99 0

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

find . -name files1* -type f -exec basename {} \; | xargs rm
Run Code Online (Sandbox Code Playgroud)