可以在没有正则表达式的路径中找到确切的文件名



使用Ansible我正在努力使用find模块的确切文件名,而不使用regex。

我的用例需要用户输入,我担心用户会试图聪明地使用regex做比我想让他们做的更多的事情。如果字符串包含regex字符,我可以拒绝它,但我宁愿将字符串视为精确的文件名。

下面的代码确实找到了匹配的文件,但是如果给定的文件名是*.txt,那么所有的.txt文件都将被匹配。

- name: collect paths for matching file
find:
paths: "{{ target_folder }}"
patterns: "{{ filename }}"
file_type: file
recurse: true
register: file_matches

我担心拒绝特定字符串的影响的原因是,我知道,在极少数情况下,要查看的一些文件名具有非ascii字符,我不知道这将如何与no-regex断言一起发挥作用。

看起来违反直觉,一个选项实际上是通过regex启用匹配,参数use_regex: trueregex_escape过滤器的使用相结合。

原因在pattern参数注释中指出:

一个或多个(shell或regex)模式,其类型由use_regex选项控制。

<一口> 来源:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/find_module.html参数模式

并且由于use_regex的默认值是false,因此默认行为将具有Shell模式,如果您以regex方式转义该字符,则无法很好地工作。

所以,你的任务最终是:

- 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

相关内容

  • 没有找到相关文章

最新更新