Text 使用Ansible';找不到确切的文件名;s查找模块
我能够在Text 使用Ansible';找不到确切的文件名;s查找模块,text,ansible,find,Text,Ansible,Find,我能够在/app目录下找到modules.jar,如下输出所示: find /app -name modules.jar 2>/dev/null /app/axmw/TEST/jboss-eap-7.2.5.CP/misc/modules.jar /app/jboss/modules.jar 如您所见,我们发现了两个文件结果 注意:我需要文件modules.jar的精确匹配 但是,当我使用ansible find模块搜索相同的匹配项时,会发现零个匹配项 tasks: -
/app
目录下找到modules.jar
,如下输出所示:
find /app -name modules.jar 2>/dev/null
/app/axmw/TEST/jboss-eap-7.2.5.CP/misc/modules.jar
/app/jboss/modules.jar
如您所见,我们发现了两个文件结果
注意:我需要文件modules.jar的精确匹配
但是,当我使用ansible find模块搜索相同的匹配项时,会发现零个匹配项
tasks:
- name: Debug check if Profile Path or server name are valid by checking PATH
find:
paths: /app
file_type: file
patterns: 'modules.jar'
excludes: 'log,tmp,.installation'
tags: always
register: jarfound
- name: Number of modules.jar found under /app
debug:
msg: "{{ jarfound.matched }}"
输出:
TASK [Debug check if Profile Path or server name are valid by checking PATH] *******************************************************************************************
ok: [10.9.156.126]
TASK [Number of modules.jar found under /app] ********************************************************************************************************************
ok: [10.9.156.126] => {
"msg": "0"
}
我也尝试了下面的模式,但每次都匹配为“0”
您能解释一下原因吗?您的任务参数列表中缺少了递归指令。如中所述,此参数的默认值为no
,因此您无法找到顶级/app
路径子目录下的文件。只需按如下所示添加recurse
,即可找到该文件:
tasks:
- name: Debug check if Profile Path or server name are valid by checking PATH
find:
paths: /app
file_type: file
recurse: yes
patterns: 'modules.jar'
excludes: 'log,tmp,.installation'
tags: always
register: jarfound
- name: Number of modules.jar found under /app
debug:
msg: "{{ jarfound.matched }}"
[Update]查看上一条评论(关于忽略.installation
文件夹),excludes
参数仅适用于项目的basename(摘自文档-其基名与excludes模式匹配的项目从模式匹配中剔除)。因此,排除
不适用于此场景
您有以下选项来获得您想要的。根据场景中的适用性和适用性,您可以使用这些选项中的任何一个
我注意到.installation
文件夹下的文件名是misc.modules.jar,因此,如果切换到regex而不是当前的globs(shell)模式,您可以简单地排除它。为此,添加使用_regex:yes
并将模式更改为modules\\\.jar
,以使此文件名非常明确。这将起作用,因为与shell模式不同,regex需要匹配整个文件名,而不仅仅是部分文件名
使用find两次,首先使用file\u type:directory
,您可以将“log、tmp、.installation”排除在外,并获取所有其他目录<代码>排除
这次将起作用,因为您正在搜索文件夹,并且每个文件夹的基本名称将与此排除
匹配。在下面的find
task搜索文件名时,使用此任务中注册的o/p作为path
。我仍然建议在secondfind中使用regex,以进一步限制对整个文件名的搜索
任务中注册的o/p进行后期处理,查找任务,并从列表中筛选出包含要明确删除的文件夹的元素。看看哪一个有多个用于此目的的解决方案
如果我给出
recurse:yes
我会得到包含.installation
文件夹的文件的输出,我已经排除了该文件夹,如下所示:“msg”:“在/app/jboss/.installation/patches/misc.modules.jar找到多个jar”
你能建议吗?用解决方案更新了答案以解决忽略中间文件夹的问题。