gpt4 book ai didi

ansible - 循环查找文件并删除它们

转载 作者:行者123 更新时间:2023-12-04 04:02:21 28 4
gpt4 key购买 nike

我想删除某些包含特定格式的子目录中的文件。但是,我收到了错误

'dict object' has no attribute 'files'.

下面是我的代码。文件模式将为 file_name.file_extension.processID.YYYY-MM-DD@HH:MM:SS~

我的变量

fileToFindInAllSubDirecotry
- "home/usr/file1"
- "home/usr/file2"
- "home/usr/file3/file4"
- "home/usr/file5"

我的剧本角色

- name: Find file
find:
paths: "{{ item }}"
use_regex: yes
patterns:
- '.*\.\d+\.\d{4}-\d{2}-\d{2}@\d{2}:\d{2}:\d{2}~$'
age: 1d
recurse: yes
register: fileToDelete
loop: "{{ fileToFindInAllSubDirecotry }}"

- name: Delete file
file:
path: "{{ item.path }}"
state: absent
loop: "{{ fileToDelete.files }}"

这是示例文件和目录

home
|-------usr
|-------file1
|-------configFile.xml
|-------file2
|-------propertiesFile.txt.2012.2020-07-13@23:08:10~
|-------file3
|-------file4
|-------content.yml.2012.2020-04-04@23:08:10~
|-------file5
|-------configFile.xml.2012.2020-03-05@13:08:10~

最佳答案

发生这种情况是因为您正在填充 find有一个循环,所以你最终得到的结果将是一个有列表或 results 的字典。 .

类似于:

ok: [localhost] => {
"msg": {
"changed": false,
"msg": "All items completed",
"results": [
{
...
"files": [ ... ],
...
"item": "/home/usr/file1",
...
},
{
...
"files": [ ... ],
...
"item": "/home/usr/file2",
...
},
...
]
}
}

有两种方法可以解决这个问题:

  1. 最好的一个,因为正如文档所指出的那样, paths 模块 find 的参数可以接受路径列表,只需将整个 fileToFindInAllSubDirecotry 传递给它即可变量而不是使用循环,这样您的删除就可以按原样进行:

    - name: Find file
    find:
    paths: "{{ fileToFindInAllSubDirecotry }}"
    use_regex: yes
    patterns:
    - '.*\.\d+\.\d{4}-\d{2}-\d{2}@\d{2}:\d{2}:\d{2}~$'
    age: 1d
    recurse: yes
    register: fileToDelete

    - name: Delete file
    file:
    path: "{{ item.path }}"
    state: absent
    loop: "{{ fileToDelete.files }}"
  2. 使用 json_query 获取 result[*].files然后 flatten 列表的结果列表

    - name: Find file
    find:
    paths: "{{ item }}"
    use_regex: yes
    patterns:
    - '.*\.\d+\.\d{4}-\d{2}-\d{2}@\d{2}:\d{2}:\d{2}~$'
    age: 1d
    recurse: yes
    register: fileToDelete
    loop: "{{ fileToFindInAllSubDirecotry }}"

    - name: Delete file
    file:
    path: "{{ item.path }}"
    state: absent
    loop: "{{ fileToDelete | json_query('results[*].files') | flatten }}"

关于ansible - 循环查找文件并删除它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62899478/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com