簡體   English   中英

Ansible在沒有正則表達式的路徑中找到確切的文件名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM