如何在MacOS上使用ansible获得文件创建时间?



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

我遇到的问题是,文件和stat模块给你的"时间",但在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的统计模块没有给我这个。创建日期是可用的,例如我可以通过ls -ldU获得它。

怎么解呢?

据我所知,如果不使用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

最新更新