[英]Ansible find in path exact filename without regex
使用 Ansible,我在不使用正則表達式的情況下努力使用find
模塊來獲取確切的文件名。
我的用例需要用戶輸入,我擔心用戶會嘗試變得聰明並使用正則表達式做的事情比我想讓他們做的更多。 如果它包含正則表達式字符,我可以拒絕該字符串,但我寧願將字符串視為確切的文件名。
下面的代碼確實找到了匹配的文件,但如果給定的文件名是*.txt
,則所有 .txt 文件都將被匹配。
- name: collect paths for matching file
find:
paths: "{{ target_folder }}"
patterns: "{{ filename }}"
file_type: file
recurse: true
register: file_matches
我擔心拒絕特定字符串的影響的原因是,我知道在極少數情況下,將要查看的某些文件名包含非 ASCII 字符,我不知道這將如何發揮作用無正則表達式斷言。
看起來違反直覺,一個選項是通過正則表達式實際啟用匹配,參數use_regex: true
結合使用regex_escape
過濾器。
其原因在pattern
參數注釋中指出:
一種或多種(shell 或正則表達式)模式,其類型由
use_regex
選項控制。
來源: https ://docs.ansible.com/ansible/latest/collections/ansible/builtin/find_module.html#parameter-patterns
並且由於use_regex
的默認值為false
,因此默認行為將是具有 Shell 模式,如果您以正則表達式方式轉義字符,則該模式將無法正常工作。
所以,你的任務最終是:
- name: collect paths for matching file
find:
paths: "{{ target_folder }}"
patterns: "{{ filename | regex_escape }}"
file_type: file
recurse: true
use_regex: true
register: file_matches
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.