Ansible - 将找到的文件的 mtime 转换为 YYYY-MM-DD 格式

Ansible - 将找到的文件的 mtime 转换为 YYYY-MM-DD 格式

我正在使用 Ansible 查找、压缩和重命名日志文件,并希望将压缩日志的名称附加其时间戳(mtime)来重命名,如下所示:

log.log---> log-2021-07-06.log

Ansible 允许我按以下格式提取 mtime:

log.log--->log-1575048603.1364305.log

我使用该模块查找日志find

 - name: Locate Logs
    find:
      paths: /some/path
      file_type: file
      recurse: yes
      patterns: '*some-log-pattern.log*'
      age_stamp: mtime
    register: found_logs

并显示 Ansible 发现的 mtime,如下所示:

- name: Show found mtime
    debug:
      msg: "Will rename {{ item.path | basename }}.gz to {{item.path | basename}}-{{ item.mtime }}.gz"
    with_items: "{{ found_logs.files }}"

这给了我上面提到的格式。

有没有办法将 Ansible 的格式转换为标准YYYY-MM-DD格式,如上所示?

我遇到过很多类似的问题,以及 Ansible 文档(https://docs.ansible.com/ansible/devel/user_guide/playbooks_filters.html#handling-dates-and-times),但迄今为止尚未成功。

任何帮助将不胜感激。

谢谢!

答案1

问:查找并重命名(压缩)日志文件。

答:使用过滤器时间。看处理日期和时间。例如,给定压缩文件

shell> ls -1 some/path/
logA.log.gz
logB.log.gz

任务

    - name: Locate Logs
      find:
        paths: some/path
        file_type: file
        recurse: yes
        patterns: 'log*'
        age_stamp: mtime
      register: found_logs

    - name: Show found mtime
      debug:
        msg: "Rename
              {{ item.path }} to
              {{ _arr.0 }}.{{ _arr.1 }}-{{ _date }}.{{ _arr.2 }}"
      loop: "{{ found_logs.files }}"
      loop_control:
        label: "{{ item.path }}"
      vars:
        _arr: "{{ item.path.split('.') }}"
        _name: "{{ _arr.0 }}"
        _ext1: "{{ _arr.1 }}"
        _ext2: "{{ _arr.2 }}"
        _date: "{{ '%Y-%m-%d'|strftime(item.mtime) }}"

给出

  msg: Rename some/path/logB.log.gz to some/path/logB.log-2021-07-06.gz
  msg: Rename some/path/logA.log.gz to some/path/logA.log-2021-07-06.gz

相关内容