首页 > 解决方案 > 如何在 MacOS 上使用 ansible 获取文件创建时间?

问题描述

我试图在 MacOS 上的 ansible playbook 中列出一组目录及其创建时间。

我遇到的问题是文件和统计模块为您提供了文件的“ctime”,但在 MacOS 上,这是最后一次元数据更改的时间,而不是创建日期。

例如这个剧本:

- name: Get dirs and create dates
  hosts: localhost

  tasks:
  - name: make a list of dirs
    find:
      paths:
        - "/Users/me/Work/Customers"
      file_type: directory
      recurse: false
    register: projectdirs

  - name: Dump found paths
    debug:
      msg: "{{ shortname }} {{ date }}"
    loop: "{{ projectdirs.files }}"
    loop_control:
      label: "{{ item.path }}"
    vars:
      shortname: "{{ item.path | basename }}"
      date: "{{ '%Y-%m-%d' | strftime(item.ctime) }}"

这只是将今天的日期列为目录的“创建”日期。

ok: [localhost] => (item=/Users/me/Work/Customers/Base) => {
    "msg": "basefarm 2021-08-23 1629699678.021843"
}
ok: [localhost] => (item=/Users/me/Work/Customers/Acme) => {
    "msg": "Orange 2021-08-23 1629699678.5415485"
}
ok: [localhost] => (item=/Users/me/Work/Customers/Foo) => {
    "msg": "VKB 2021-08-23 1629699679.0579438"
}
ok: [localhost] => (item=/Users/me/Work/Customers/Bar) => {
    "msg": "LombardOdier 2021-08-23 1629699679.5856457"
}
...

我发现原因当然是ctime不是mac上的创建时间......

有没有解决的办法?我想要真正的创建日期,但 Ansible 的 stat 模块没有给我这个。创建日期是可用的,例如我可以得到它ls -ldU

那么我该如何解决呢?

标签: macosansible

解决方案


据我所知,如果不使用 shell 命令,就无法做到这一点。

  - name: make a list of dirs
    find:
      paths:
        - "/Users/me/Work/Customers"
      file_type: directory
      recurse: false
    register: projectdirs

  - name: Get creation time
    shell: GetFileInfo {{ item.path }} | grep 'created:'
    loop: "{{ projectdirs.files }}"
    loop_control:
      label: "{{ item.path }}"
    register: directories

  - name: Dump found paths
    debug:
      msg: "{{ item.item.path }} {{ item.stdout.split('created: ')[1] }}"
    loop: "{{ directories.results }}"
    loop_control:
      label: "{{ item.item.path }}"

给了我这个结果:

ok: [localhost] => (item=/Users/jeromeverdoni/stackoverflow/68888321) => {
    "msg": "/Users/jeromeverdoni/stackoverflow/68888321 08/23/2021 08:01:44"
}

希望这与您的预期行为足够接近。

作为参考,GetFileInfo 输出:

╰─ GetFileInfo /Users/jeromeverdoni/stackoverflow/68888321     
directory: "/Users/jeromeverdoni/stackoverflow/68888321"
attributes: avbstclinmedz
created: 08/23/2021 08:01:44
modified: 08/23/2021 08:03:18

推荐阅读