我有一个目录,其中包含der_azureData_Linux_x64_24.1.0.0.7.tar
等文件。我需要找到该目录下最新的文件,并将文件名拆分为名称和版本。
预期输出
name: der_azureData_Linux_x64
version: 24.1.0.0.7
剧本
我尝试了下面的剧本,但它没有显示文件名。
- hosts: localhost
gather_facts: no
tasks:
- find:
paths: "/root/ansible.temp/"
patterns: "*.tar"
recurse: yes
register: files_matched
- set_fact:
latest_files: "{{ latest_files | default([]) + [item.path] }}"
loop: "{{ files_matched.files | sort(attribute='mtime', reverse=true) }}"
when: "item.path | dirname not in latest_files | default([]) | map('dirname')"
##
# The loop_control is just there for validation purpose
##
loop_control:
label: "{{ '%Y-%m-%d %H:%M:%S' | strftime(item.mtime) }} {{ item.path }}"
- debug:
var: latest_files
- name: check the directories and locations
shell: |
f = {{ latest_files }} # loop over each file in current directory
name="${f%_*}" # trim from right to first '_'
register: name
- name: print values
debug:
msg: "filename {{ name.stdout }} "
输出如下
TASK [check the directories and locations] **************************
changed: [localhost]
TASK [print values] *************************************************
ok: [localhost] => {
"msg": "filename "
}
如何在目录中查找新文件?…
给定测试文件
tree test
test
├── newest.yml
├── test_1.2.3.4.tar
└── test_2.3.4.5.tar
ls -al test*
-rw-r--r--. 1 user users 0 Jan 16 12:00 test_1.2.3.4.tar
-rw-r--r--. 1 user users 0 Jan 16 12:00 test_2.3.4.5.tar
一个最小的示例剧本
---
- hosts: localhost
become: false
gather_facts: false
tasks:
- name: Get files in a folder
find:
paths: "/home/{{ ansible_user }}/test"
patterns: "*.tar"
register: result
- name: Get newest file
set_fact:
LATEST: "{{ result.files | sort(attribute='mtime',reverse=true) | first }}"
- name: Show LATEST
debug:
msg: "{{ LATEST.path | basename }}"
将导致输出
TASK [Show LATEST] ****
ok: [localhost] =>
msg: test_2.3.4.5.tar
类似Q&
- 获取Ansible目录中最新的文件名
如何划分或分割文件名与版本名在文件名?
你可以继续
- name: Show VERSION only
debug:
msg: "{{ LATEST.path | basename | split('_') | last | splitext | first }}"
输出
TASK [Show VERSION only] ****
ok: [localhost] =>
msg: 2.3.4.5
类似Q&
- 解压文件名,不带扩展名- Ansible
过滤器使用
basename
first
last
split
splitext
进一步文档
- 使用过滤器操作数据-管理文件名和路径名