ansible笔记(4)-文件操作模块(下)

上文链接:https://www.cnblogs.com/ltlinux/p/11339584.html

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校验码,如果要查找的文件比较大,那么生成校验码的时间会比较长。

举例说明:

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

[root@tlur31drk8wk ~]# ansible test -m find -a 'paths=/opt contains=".*abc.*"'

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

[root@tlur31drk8wk ~]# ansible test -m find -a 'paths=/opt contains=".*abc.*" recurse=yes'

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

[root@tlur31drk8wk ~]# ansible test -m find -a 'paths=/opt patterns="*.sh" hidden=yes'

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

[root@tlur31drk8wk ~]# ansible test -m find -a 'paths=/opt patterns="*.sh" hidden=yes file_type=any'

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

[root@tlur31drk8wk ~]# ansible test -m find -a 'paths=/opt patterns=".*.\.sh use_regex=yes file_type=ant hodden=yes"'

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

[root@tlur31drk8wk ~]# ansible test -m find -a "paths=/opt age=-2d recurse=yes"

  在 test 主机的 /opt 目录中以及其子目录中查找 atime 在2天以内的文件,不包含隐藏文件,不包含目录或软链接文件等文件类型。  

[root@tlur31drk8wk ~]# ansible test -m find -a "paths=/opt age_stamp=atime age=-2d recurse=yes"

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

[root@tlur31drk8wk ~]# ansible test -m find -a "paths=/opt size=2g recurse=yes"

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

[root@tlur31drk8wk ~]# ansible test -m find -a 'paths=/opt patterns="*.sh" hidden=yes get_checksum=yes recurse=yes"'

 

replace模块

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

常用参数:

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

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

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

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

举例说明:

  把 test 主机中的 /opt/test 文件中的所有 ABC 替换成 abc。

[root@tlur31drk8wk ~]# ansible test -m replace -a 'path=/opt/test regexp="ABC" replace=abc'

  把 test 主机中的 /opt/test 文件中的所有 ABC 替换成 abc,操作之前备份。

[root@tlur31drk8wk ~]# ansible test -m replace -a 'path=/opt/test regexp="ABC" replace=abc backup=yes'

 

参考链接:

  http://www.zsythink.net/archives/2560

  感谢原作大佬,跟着大佬学,省时又省力🙏

 

posted @ 2019-08-15 15:00  Buddha-Youth  阅读(372)  评论(0编辑  收藏  举报