此文章为「ansible笔记(2)之常用模块」的子文章。
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 校验码,如果要查找的文件比较大,那么生成校验码的时间会比较长;
例 1:在客户机的 /testdir
目录中查找文件内容中包含 abc
字符串的文件,隐藏文件会被忽略,不会进行递归查找。
$ ansible all -m find -a 'paths=/testdir contains=".*abc.*" '
例 2:在客户机的 /testdir
目录以及其子目录中查找文件内容中包含 abc
字符串的文件,隐藏文件会被忽略。
$ ansible -m find -a 'paths=/testdir contains=".*abc.*" recurse=yes '
例 3:在客户机的 /testdir
目录中查找以 .sh
结尾的文件,包括隐藏文件,但是不包括目录或其他文件类型,不会进行递归查找。
$ ansible all -m find -a 'paths=/testdir patterns="*.sh" hidden=yes'
例 4:在客户机的 /testdir
目录中查找以 .sh
结尾的文件,包括隐藏文件,包括所有文件类型,比如文件、目录、或者软链接,但是不会进行递归查找。
$ ansible all -m find -a 'paths=/testdir patterns="*.sh" file_type=any hidden=yes'
例 5:在客户机的 /testdir
目录中查找以 .sh
结尾的文件,只不过 patterns
对应的表达式为正则表达式,查找范围包括隐藏文件,包括所有文件类型,但是不会进行递归查找,不会对 /testdir
目录的子目录进行查找。
$ ansible all -m find -a 'paths=/testdir patterns=".*\.sh" use_regex=yes file_type=any hidden=yes'
例 6:在客户机的 /testdir
目录中以及其子目录中查找 mtime
在 4
天以内的文件,不包含隐藏文件,不包含目录或软链接文件等文件类型。
$ ansible all -m find -a "path=/testdir age=-4d recurse=yes"
例 7:在客户机的 /testdir
目录中以及其子目录中查找 atime
在 2
星期以内的文件,不包含隐藏文件,不包含目录或软链接文件等文件类型。
$ ansible all -m find -a "path=/testdir age=-2w age_stamp=atime recurse=yes"
例 8:在客户机的 /testdir
目录中以及其子目录中查找大于 2G 的文件,不包含隐藏文件,不包含目录或软链接文件等文件类型。
$ ansible all -m find -a "paths=/testdir size=2g recurse=yes"
例 9:在客户机的 /testdir
目录中以及其子目录中查找以 .sh
结尾的文件,并且返回符合条件文件的 sha1 校验码,包括隐藏文件。
$ ansible all -m find -a "paths=/testdir patterns=*.sh get_checksum=yes hidden=yes recurse=yes"
评论区