Linux 仅当存在多个文件时才可执行任务

Linux 仅当存在多个文件时才可执行任务,linux,file,ansible,ansible-facts,Linux,File,Ansible,Ansible Facts,我只想在存在多个文件时执行任务。如果只有一个文件存在,我需要忽略此任务。我怎样才能做到这一点。 我无法实现以下剧本 --- - name: Standardize hosts: test gather_facts: false vars: file_vars: - {id: 1, name: /etc/h_cm} - {id: 2, name: /etc/H_CM} tasks: - block: - name: Check

我只想在存在多个文件时执行任务。如果只有一个文件存在,我需要忽略此任务。我怎样才能做到这一点。 我无法实现以下剧本

---
- name: Standardize
  hosts: test
  gather_facts: false
  vars:
    file_vars:
      - {id: 1, name: /etc/h_cm}
      - {id: 2, name: /etc/H_CM}

  tasks:
    - block:
      - name: Check if both exists
        stat:
          path: "{{ item.name }}"
        with_items: "{{ file_vars }}"
        register: cm_result

      - name: Move both files
        shell: mv "{{ item.item }}" /tmp/merged
        with_items: "{{ cm_result.results }}"
        when: item.stat.exists

在检查两个任务是否都存在后,您可以添加如下设置事实任务:

  - name: set facts
    set_fact:
      files_exist: "{{ (files_exist | default([])) + [item.stat.exists] }}"
    with_items: "{{ cm_result.results }}"
并将“移动文件”任务更改为:

  - name: Move both files
    debug:
      msg: "{{ item.stat.exists }}"
    with_items: "{{ cm_result.results }}"
    when: false not in files_exist

在检查两个任务是否都存在后,您可以添加如下设置事实任务:

  - name: set facts
    set_fact:
      files_exist: "{{ (files_exist | default([])) + [item.stat.exists] }}"
    with_items: "{{ cm_result.results }}"
并将“移动文件”任务更改为:

  - name: Move both files
    debug:
      msg: "{{ item.stat.exists }}"
    with_items: "{{ cm_result.results }}"
    when: false not in files_exist

我的意思是说/etc/h_cm和/etc/h_cm应该存在,如果它们都存在,那么我只需要执行移动两个文件任务,而不是mv。我想合并两个文件。你能帮个忙吗?例如:cat/etc/h|cm/etc/h|cm | sort-u | uniq-u>/etc/h|cm它很容易,请参考它不起作用。合并文件中只有/etc/H_CM的内容,但没有/etc/H_CM的内容。我的意思是说/etc/H_CM和/etc/H_CM应该存在,如果它们都存在,我只需要执行移动两个文件任务,而不是mv。我想合并两个文件。你能帮个忙吗?例如:cat/etc/h|cm/etc/h|cm | sort-u | uniq-u>/etc/h|cm它很容易,请参考它不起作用。它在合并文件中只有/etc/H\u CM的内容,但没有/etc/H\u CM的内容