码迷,mamicode.com
首页 > 其他好文 > 详细

ansible模块find/replace

时间:2020-09-11 16:07:11      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:atime   root   版本   字符串   否则   dde   find   ash   权限   

find模块
find模块可以帮助我们在远程主机中查找符合条件的文件,就像find命令一样。

此处我们介绍一些find模块的常用参数,你可以先对这些参数有一个大概了解,然后再看小示例。

paths参数 :必须参数,指定在哪个目录中查找文件,可以指定多个路径,路径间用逗号隔开,此参数有别名,使用别名path或者别名name可以代替paths。

recurse参数 : 默认情况下,只会在指定的目录中查找文件,也就是说,如果目录中还包含目录,ansible并不会递归的进入子目录查找对应文件,如果想要递归的查找文件,需要使用recurse参数,当recurse参数设置为yes时,表示在指定目录中递归的查找文件。

hidden参数 :默认情况下,隐藏文件会被忽略,当hidden参数的值设置为yes时,才会查找隐藏文件。

file_type参数 : 默认情况下,ansible只会根据条件查找"文件",并不会查找"目录"或"软链接"等文件类型,如果想要指定查找的文件类型,可以通过file_type指定文件类型,可指定的文件类型有any、directory、file、link 四种。

patterns参数 : 使用此参数指定需要查找的文件名称,支持使用shell(比如通配符)或者正则表达式去匹配文件名称,默认情况下,使用shell匹配对应的文件名,如果想要使用python的正则去匹配文件名,需要将use_regex参数的值设置为yes。

use_regex参数:默认情况下,find模块不会使用正则表达式去解析patterns参数中对应的内容,当use_regex设置为yes时,表示使用python正则解析patterns参数中的表达式,否则,使用glob通配符解析patterns参数中的表达式。

contains参数:使用此参数可以根据文章内容查找文件,此参数的值为一个正则表达式,find模块会根据对应的正则表达式匹配文件内容。

age参数 :使用此参数可以根据时间范围查找文件,默认以文件的mtime为准与指定的时间进行对比,比如,如果想要查找mtime在3天之前的文件,那么可以设置age=3d,如果想要查找mtime在3天以内的文件,可以设置age=-3d,这里所说的3天是按照当前时间往前推3天,可以使用的单位有秒(s)、分(m)、时(h)、天(d)、星期(w)。

age_stamp参数 :文件的时间属性中有三个时间种类,atime、ctime、mtime,当我们根据时间范围查找文件时,可以指定以哪个时间种类为准,当根据时间查找文件时,默认以mtime为准。

size参数 :使用此参数可以根据文件大小查找文件,比如,如果想要查找大于3M的文件,那么可以设置size=3m,如果想要查找小于50k的文件,可以设置size=-50k,可以使用的单位有t、g、m、k、b。

get_checksum参数 :当有符合查找条件的文件被找到时,会同时返回对应文件的sha1校验码,如果要查找的文件比较大,那么生成校验码的时间会比较长。

在客户端创建了个新文件并写入内容:
ansible jack6-2 -m blockinfile -a ‘path=/tmp/.test block="I am a guest\noh yeah,fck I do not know\nmy god,so fashion" insertafter=EOF create=yes‘

查看有无此文件:
ansible jack6-2 -m find -a ‘path=/tmp/ recurse=yes contains=".fck." age=1m size=-1k hidden=yes‘
结果如下:
jack6-2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"examined": 159,
"files": [
{
"atime": 1598778340.937156,
"ctime": 1598778303.503156,
"dev": 2050,
"gid": 0,
"gr_name": "root",
"inode": 1310864,
"isblk": false,
"ischr": false,
"isdir": false,
"isfifo": false,
"isgid": false,
"islnk": false,
"isreg": true,
"issock": false,
"isuid": false,
"mode": "0644",
"mtime": 1598778303.503156,
"nlink": 1,
"path": "/tmp/.test",
"pw_name": "root",
"rgrp": true,
"roth": true,
"rusr": true,
"size": 116,
"uid": 0,
"wgrp": false,
"woth": false,
"wusr": true,
"xgrp": false,
"xoth": false,
"xusr": false
}
],
"matched": 1,
"msg": ""
}
会显示出文件路径和名称,以及inode和权限,但是这输出信息也太多了,累赘看着

replace模块
replace模块可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被正则匹配到的字符串都会被替换。

此处我们介绍一些replace模块的常用参数,你可以先对这些参数有一个大概了解,然后再看小示例。

path参数 :必须参数,指定要操作的文件,2.3版本之前,只能使用dest, destfile, name指定要操作的文件,2.4版本中,仍然可以使用这些参数名,这些参数名作为path参数的别名使用。

regexp参数 : 必须参数,指定一个python正则表达式,文件中与正则匹配的字符串将会被替换。

replace参数 : 指定最终要替换成的字符串。

backup参数 :是否在修改文件之前对文件进行备份,最好设置为yes。

替换客户端的test的文件内容:
ansible jack6-2 -m replace -a ‘path=/tmp/.test regexp="fck" replace="no fck" backup=yes‘

ansible jack6-2 -m replace -a ‘path=/tmp/.test regexp="no fck" replace="come on ,baby" backup=yes‘

查看文件的内容:
ansible jack6-2 -m fetch -a "src=/tmp/.test dest=/root/"

查看客户端是否备份:
[root@jack6-2 tmp]# ls -a .test*
.test
.test.7046.2020-08-30@17:25:00~
.test.7161.2020-08-30@17:27:21~

ansible模块find/replace

标签:atime   root   版本   字符串   否则   dde   find   ash   权限   

原文地址:https://blog.51cto.com/13434656/2525925

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!