13-Ansible常用模块-find模块

本文详细介绍了Ansible中find模块的使用方法,包括各种参数及其功能,并提供了丰富的示例帮助理解如何查找特定文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

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-demo3 主机的 /testdir目录中查找文件内容中包含 abc 字符串的文件,隐藏文件会被忽略,不会进行递归查找。

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

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

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

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

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

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

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

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

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

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

ansible ansible-demo3 -m find -a "path=/testdir age=-1d recurse=yes"

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

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

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

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

四、总结

本节介绍了 Ansible 常用模块之 find 模块,并举例说明如何使用,下节我们介绍 replace 模块。

这里的命令常用参数介绍及示例,主要摘抄自下面文档内容,有部分改动,在这里对原作者深表感谢!

参考文档:
http://www.zsythink.net/archives/2560

### 解决 YUM 安装 Nginx 时遇到的 `Cannot find a valid baseurl` 错误 当遇到 `Cannot find a valid baseurl for repo: centos-ansible-29/7/x86_64` 这样的错误提示时,通常意味着系统的 YUM 配置文件中存在无法访问或配置不当的仓库地址。为了修复此问题并成功安装 Nginx,可以采取以下措施: #### 更新 YUM 源配置 一种有效的方案是替换默认的 CentOS 或 Ansible 提供的基础库为更稳定可靠的第三方镜像站提供的版本。例如,可以通过下载来自阿里云的 EPEL 和 CentOS 基础库来更新现有的源配置。 ```bash wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo yum clean all && yum makecache fast ``` 上述命令会将官方的 EPEL 及基础库指向阿里云提供的国内加速镜像站点,并清理缓存重新构建索引以确保最新的包列表被加载[^3]。 #### 修改特定主机上的 YUM 源设置而不启用它们 如果仅需临时调整某些服务器(如 testA 下辖的 server5、server6)上的 YUM 行为而不想改变全局设定,则可通过Ansible模块直接操作这些机器上的YUM存储库定义,在不影响其他服务的前提下完成必要的软件部署工作。 ```yaml --- - hosts: testA gather_facts: no tasks: - name: Add local CD-ROM as disabled repository on specific servers. become: yes ansible.builtin.yum_repository: name: "local" description: "Local CD-ROM Repository" baseurl: "file:///media/" enabled: false ``` 这段 Playbook 将创建一个新的名为 “local”的本地光盘映射型 YUM 存储库条目,但不会激活它,从而允许管理员根据实际情况决定何时何地使用该资源[^2]。 通过以上方法之一应该能够有效解决由于缺少合法的基础 URL 所引发的问题,并顺利执行 `yum install nginx` 来获取所需的 Web 服务器组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值