find模块

查找符合条件的文件,跟find命令一样

案例

1、在db_servers主机的/testdir目录中查找文件内容中包含abc字符串的文件,隐藏文件会被忽略,不会进行递归查找。

$ ansible db_servers -m find -a 'paths=/testdir contains=".*abc.*" '

2、在db_servers主机的/testdir目录以及其子目录中查找文件内容中包含abc字符串的文件,隐藏文件会被忽略。

$ ansible db_servers -m find -a 'paths=/testdir contains=".*abc.*" recurse=yes '

3、在db_servers主机的/testdir目录中查找以.sh结尾的文件,包括隐藏文件,但是不包括目录或其他文件类型,不会进行递归查找。

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

4、在db_servers主机的/testdir目录中查找以.sh结尾的文件,包括隐藏文件,包括所有文件类型,比如文件、目录、或者软链接,但是不会进行递归查找。

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

5、在db_servers主机的/testdir目录中查找以.sh结尾的文件,只不过patterns对应的表达式为正则表达式,查找范围包括隐藏文件,包括所有文件类型,但是不会进行递归查找。

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

6、在db_servers主机的/testdir目录中以及其子目录中查找mtime在4天以内的文件,不包含隐藏文件,不包含目录或软链接文件等文件类型。

$ ansible db_servers -m find -a "path=/testdir age=-4d recurse=yes"

7、在db_servers主机的/testdir目录中以及其子目录中查找atime在2星期以内的文件,不包含隐藏文件,不包含目录或软链接文件等文件类型。

$ ansible db_servers -m find -a "path=/testdir age=-2w age_stamp=atime recurse=yes"

8、在db_servers主机的/testdir目录中以及其子目录中查找大于2G的文件,不包含隐藏文件,不包含目录或软链接文件等文件类型。

$ ansible db_servers -m find -a "paths=/testdir size=2g recurse=yes"

9、在db_servers主机的/testdir目录中以及其子目录中查找以.sh结尾的文件,并且返回符合条件文件的sha1校验码,包括隐藏文件

$ ansible db_servers -m find -a "paths=/testdir patterns=*.sh get_checksum=yes  hidden=yes recurse=yes"


常用参数

  • paths
    必须参数,指定在哪个目录中查找文件,可以指定多个路径,路径间用逗号隔开,使用别名path或者别名name可以代替paths。
  • recurse
    默认情况下,只会在指定的目录中查找文件,ansible并不会递归的进入子目录查找对应文件。当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校验码,如果要查找的文件比较大,那么生成校验码的时间会比较长。

replace模块

可以根据指定的正则表达式替换文件中的字符串,只要是被正则匹配到的字符串都会被替换。

案例

1、把db_servers主机中的/testdir/test文件中的所有ASM字符串替换成小写的asm字符串

$ ansible db_servers -m replace -a 'path=/testdir/test regexp="ASM" replace=asm'

2、把db_servers主机中的/testdir/test文件中的所有ASM字符串替换成小写的asm字符串,但是在操作文件之前会进行备份。

$ ansible db_servers -m replace -a 'path=/testdir/test regexp="ASM" replace=asm backup=yes'


常用参数

  • path
    必须参数,指定要操作的文件,注意:ansible 2.3版本之前,只能使用dest, destfile, name指定要操作的文件。
  • regexp
    必须参数,指定一个python正则表达式,文件中与正则匹配的字符串将会被替换。
  • replace
    指定最终要替换成的字符串。
  • backup
    是否在修改文件之前对文件进行备份,建议设置为yes。

参考资料:
转载于朱老师博客

今天的学习是为了以后的工作更加的轻松!