【问题标题】:Ansible: How make select sub list of listAnsible:如何选择列表的子列表
【发布时间】:2018-12-12 09:58:50
【问题描述】:

我有一个文件列表(带有完整路径)。 如何仅选择与模式匹配的文件?

例如我有:

/tmp/test/a.txt
/tmp/test/b.txt
/tmp/test/c.log
/tmp/test/d.log
/tmp/test/e.txt

我只想获取以 log 结尾的文件

/tmp/test/c.log
/tmp/test/d.log

我认为我的列表不适用于您的示例

这是我的脚本及其输出

- name: List all files 
    debug:
      msg: "{{ item }}"
      verbosity: 3
    with_items: "{{ valid_logs_dir_files.stdout_lines }}"

将打印

changed: [localhost] => (item=/tmp/test/a.txt)
ok: [localhost] => (item=/tmp/test/b.txt)
ok: [localhost] => (item=/tmp/test/c.log)
ok: [localhost] => (item=/tmp/test/d.log)
ok: [localhost] => (item=/tmp/test/e.txt)

【问题讨论】:

    标签: ansible


    【解决方案1】:

    如果列表来自远程文件系统的动态列表,您可以使用 find,例如

    - name: Get file name based on pattern
      find:
         paths: /tmp/test
         patterns: "*.log"
      register: find_results
    
    - name: Download files log files, just as example about using find_result
      fetch: src="{{ item['path'] }}" dest="myLocalDir"
      with_items: "{{ find_results['files'] }}"
    

    详情请见find - Return a list of files based on specific criteria

    要列出与本地计算机上的模式匹配的文件,请参阅fileglob

    如果您的列表不是从文件系统动态获取但已经完成,请使用matchsearch filter

    - hosts: 127.0.0.1
      connection: local   
      vars:
         myFiles:
              - /tmp/test/a.txt
              - /tmp/test/b.txt
              - /tmp/test/c.log
              - /tmp/test/d.log
              - /tmp/test/e.txt
    
      tasks:
         - name: Filter list
           set_fact:
              new_list: "{{ myFiles | select('match','^/tmp/test/.*..log$') | list }}"
    
         - name: Show filtered list
           debug: msg="{{ item }}"
           with_items: "{{ new_list }}"
    

    file 模块相应地替换debug 以删除您的文件。

    【讨论】:

    • 远程列表不再存在,我不想搜索整个目录并删除不需要的文件,只有列表中与模式匹配的文件才能安全删除
    • 我已经更新了问题,我的列表无法与您的示例一起使用
    • 该示例通过过滤列表来工作。您没有显示您的剧本的完整任务,也没有显示 set_fact 和相关的选择。
    猜你喜欢
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2016-07-01
    • 2017-03-30
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多