如何在目录中找到新文件,并在文件名中使用版本名划分/分割文件名?



我有一个目录,其中包含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

进一步文档

  • 使用过滤器操作数据-管理文件名和路径名

最新更新