自动化运维—ansible常用模块之文件操作(find&replace模块)


文章目录

  • 自动化运维---ansible常用模块之文件操作(find&replace模块)
  • 1.find模块
  • find模块作用
  • find模块参数
  • find模块应用
  • 2.replace模块
  • replace模块作用
  • replace模块参数
  • replace模块应用


1.find模块

find模块作用

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

find模块参数

  • paths参数:必须参数,指定在哪个目录中查找文件,可以指定多个路径,路径间用逗号隔开,此参数有别名,使用别名paths或者别名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。
  • contains参数:使用此参数可以根据文章内容查找文件,此参数的值为一个正则表达式,find模块会根据对应的正则表达式匹配文件内容。
  • age参数:使用此参数可以根据时间范围查找文件,==默认以文件的mtime为准与指定的时间进行对比,==比如,如果想要查找mtime在3天之前的文件,那么可以设置fage=3d,如果想要查找mtime在3天以内的文件,可以设置fage=-3d,这里所说的3天是按照当前时间往前推3天,可以使用的单位有秒(s)、分(m)、时(h)、天(d)、星期(w)。
  • age_ stamp参数:文件的时间属性中有三个时间种类,atime、ctime、 mtime,,==当我们根据时间范围查找文件时,可以指定以哪个时间种类为准,==当根据时间查找文件时,默认以mtime为准。
  • use_ regex参数:默认情况下,find模块不会使用正则表达式去解析patterns参数中对应的内容,当use_ regex设置为yes时,表示使用python正则解析patterns参数中的表达式,否则,使用glob通配符解析patterns参数中的表达式。
  • size参数:使用此参数可以根据文件大小查找文件,比如,如果想要查找大于3M的文件,那么可以设置isize=3m,如果想要查找小于50k的文件,可以设tsize=-50k,可以使用的单位有t、g、m、k、b。
  • get_ checksum参数:当有符合查找条件的文件被找到时,会同时返回对应文件的sha1校验码,如果要查找的文件比较大,那么生成校验码的时间会比较长

find模块应用

在/testdir目录中查找内容含有hello的文件:

ansible testB -m find -a 'paths=/testdir contains=".*hello.*"'

一开始虽然返回SUCCESS,但没有具体信息,说明没有匹配到的文件

ansible 命令修改文件内容 ansible替换文件内容_查找文件

在远程主机中创建测试文档:

ansible 命令修改文件内容 ansible替换文件内容_查找文件_02

ansible testB -m find -a 'paths=/testdir contains=".*hello.*"'

再次查找,就会返回对应文件信息

ansible 命令修改文件内容 ansible替换文件内容_ansible 命令修改文件内容_03

在/testdir目录及其子目录下查找内容含有hello的文件(recurse=yes包含子目录):

先在/testdir目录的子目录下创建测试文档:

ansible 命令修改文件内容 ansible替换文件内容_ansible 命令修改文件内容_04

ansible testB -m find -a 'paths=/testdir contains=".*hello.*" recurse=yes'

此时的结果不仅有test文件,还有1目录下的h文件

ansible 命令修改文件内容 ansible替换文件内容_ansible 命令修改文件内容_05

在/testdir目录中查找文件名以.sh结尾的文件(hidden=yes包含隐藏文件):

先在/testdir目录下创建以.sh结尾的隐藏文件:

ansible 命令修改文件内容 ansible替换文件内容_正则表达式_06

ansible testB -m find -a 'paths=/testdir patterns="*.sh" hidden=yes'

ansible 命令修改文件内容 ansible替换文件内容_字符串_07

在/testdir目录中查找文件名以.sh结尾的任意类型的“文件”(hidden=yes包含隐藏文件):

先在/testdir目录下创建以.sh结尾的隐藏目录:

ansible 命令修改文件内容 ansible替换文件内容_正则表达式_08

ansible testB -m find -a 'paths=/testdir patterns="*.sh" file_type=any hidden=yes'

ansible 命令修改文件内容 ansible替换文件内容_ansible 命令修改文件内容_09


在以文件名查找时,使用正则表达式匹配(use_regex=yes):

ansible testB -m find -a 'paths=/testdir patterns=".*\.sh" use_regex=yes file_type=any hidden=yes'

ansible 命令修改文件内容 ansible替换文件内容_ansible 命令修改文件内容_10

指定时间范围查找文件:
在/testdir目录及其子目录下查找2小时内创建的文件(age=-2h表示mtime在2小时内):

ansible testB -m find -a 'paths=/testdir age=-2h recurse=yes'

ansible 命令修改文件内容 ansible替换文件内容_查找文件_11


指定时间种类:

在/testdir目录及其子目录下查找2天内被访问过的文件(age_stamp=atime指定时间种类):

ansible testB -m find -a 'paths=/testdir age=-2d age_stamp=atime recurse=yes'

ansible 命令修改文件内容 ansible替换文件内容_ansible 命令修改文件内容_12

指定文件大小范围查找文件:
在/testdir目录及其子目录下查找大于1g的文件(size=1g大于1g):

ansible testB -m find -a 'paths=/testdir size=1g recurse=yes'

因为该目录中没有大于1g的文件,所以没有文件信息

ansible 命令修改文件内容 ansible替换文件内容_ansible 命令修改文件内容_13


当有符合条件的文件被找到时,返回sha1校验码:

ansible testB -m find -a 'paths=/testdir contains=".*hello.*" get_checksum=yes recurse=yes'

ansible 命令修改文件内容 ansible替换文件内容_字符串_14

2.replace模块

replace模块作用

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

replace模块参数

  • path参数:必须参数,指定要操作的文件
  • regexp参数:必须参数,指定一个python正则表达式,文件中与正则匹配的字符串将会被替换。
  • replace参数:指定最终要替换成的字符串。
  • backup参数:是否在修改文件之前对文件进行备份,最好设为yes

replace模块应用

首先在远程主机中准备一个测试文档:

ansible 命令修改文件内容 ansible替换文件内容_字符串_15


指定正则表达式替换某个字符串(匹配到的字符串都会被替换):

ansible testB -m replace -a 'path=/testdir/test regexp="USE" replace=use'

ansible 命令修改文件内容 ansible替换文件内容_查找文件_16


ansible 命令修改文件内容 ansible替换文件内容_正则表达式_17


指定正则表达式替换某个字符串(替换前进行备份):

ansible testB -m replace -a 'path=/testdir/test regexp="use" replace=USE backup=yes'

ansible 命令修改文件内容 ansible替换文件内容_查找文件_18


ansible 命令修改文件内容 ansible替换文件内容_正则表达式_19