ansible常用模块之 -- find模块 – 返回基于特定条件的文件列表
find模块 – 返回基于特定条件的文件列表
一、摘要
- 返回基于特定条件的文件列表。多个标准被 and 放在一起。
- 对于Windows目标,使用win_find模块代替。
二、参数
参数 | 选项/默认值 | 描述 |
---|---|---|
age string | 选择年龄大于或等于指定时间的文件。 使用负年龄查找等于或小于指定时间的文件。 您可以通过指定任何这些单词的首字母(例如,“1w”)来选择秒、分钟、小时、天或周。 | |
age_stamp string | · mtime ⬅️ · atime · ctime | 选择与之比较年龄的文件属性。 |
contains string | 应该与文件内容匹配的正则表达式或模式。 | |
depth integer | 设置要下降到的最大层数。 将递归设置为no将覆盖这个值,它实际上是深度1。 默认是无限深度。 | |
excludes list | 一个或多个(shell或regex)模式,其类型由use_regex选项控制。 基名与排除模式匹配的项将从模式匹配中剔除。可以使用列表指定多个模式。 | |
file_type string | · file ⬅️ · any · directory · link | 要选择的文件类型。 在Ansible 2.3中添加了“link”和“any”选项 |
follow boolean | · no ⬅️ · yes | 对于使用python 2.6+的系统,将此设置为yes以遵循路径中的符号链接 |
get_checksum boolean | · no ⬅️ · yes | 将此设置为yes以检索文件的SHA1校验和。 |
hidden boolean | · no ⬅️ · yes | 将此设置为yes以包含隐藏文件,否则它们将被忽略 |
paths list required | 要搜索的目录的路径列表。所有路径必须是完全限定的。 | |
patterns list | Default:[] | 一个或多个(shell或regex)模式,其类型由use_regex选项控制。 这些模式将返回的文件列表限制为那些基名至少匹配指定模式中的一个的文件。可以使用列表指定多个模式。 模式是根据文件基名匹配的,不包括目录。 当使用regexen时,模式必须匹配整个文件名,而不仅仅是文件名的一部分。因此,如果您希望匹配所有以.default结尾的文件,则需要使用’.*.default’作为regexp,而不仅仅是’.default’。 这个参数需要一个列表,可以用逗号分隔,也可以用YAML分隔。如果任何模式包含逗号,请确保将它们放在一个列表中,以避免以不希望的方式分割模式。 当use_regex=False时,默认为’*‘,或’.*'当use_regex = True。 |
recurse boolean | · no ⬅️ · yes | 如果目标是一个目录,则递归向下查找该目录以查找文件 |
size | 选择大于或等于指定大小的文件。 使用负大小查找等于或小于指定大小的文件。 不合格的值以字节为单位,但可以添加b、k、m、g和t,分别指定字节、千字节、兆字节、千兆字节和太字节。 不计算目录的大小。 | |
use_regex boolean | · no ⬅️ · yes | 如果 no,则模式为文件glob (shell)。 如果 yes,它们是python正则表达式。 |
三、示例
# 递归地查找2天以上的/tmp下的文件
- name: Recursively find /tmp files older than 2 days
find:
paths: /tmp
age: 2d
recurse: yes
# 递归地查找超过4周且大于或等于1兆字节的/tmp下的文件
- name: Recursively find /tmp files older than 4 weeks and equal or greater than 1 megabyte
find:
paths: /tmp
age: 4w
size: 1m
recurse: yes
# 递归地查找上一次访问时间大于3600秒的/var/tmp下的文件
- name: Recursively find /var/tmp files with last access time greater than 3600 seconds
find:
paths: /var/tmp
age: 3600
age_stamp: atime
recurse: yes
# 找到长度等于或大于10mb的以.old或.log.gz结尾的/var/log下的文件
- name: Find /var/log files equal or greater than 10 megabytes ending with .old or .log.gz
find:
paths: /var/log
patterns: '*.old,*.log.gz'
size: 10m
# 注意YAML双引号需要转义反斜杠,但YAML单引号不需要。
# 通过regex找到长度等于或大于10mb的以.old或.log.gz结尾的/var/log下的文件
- name: Find /var/log files equal or greater than 10 megabytes ending with .old or .log.gz via regex
find:
paths: /var/log
patterns: "^.*?\\.(?:old|log\\.gz)$"
size: 10m
use_regex: yes
# 找到/var/log下所有目录,不包括nginx和mysql
- name: Find /var/log all directories, exclude nginx and mysql
find:
paths: /var/log
recurse: no
file_type: directory
excludes: 'nginx,mysql'
# 当使用包含逗号的模式时,请确保它们被格式化为列表,以避免拆分模式
# 使用单个模式,其中包含格式化为列表的逗号
- name: Use a single pattern that contains a comma formatted as a list
find:
paths: /var/log
file_type: file
use_regex: yes
patterns: ['^_[0-9]{2,4}_.*.log$']
# 使用多个模式,其中包含格式化为YAML列表的逗号
- name: Use multiple patterns that contain a comma formatted as a YAML list
find:
paths: /var/log
file_type: file
use_regex: yes
patterns:
- '^_[0-9]{2,4}_.*.log$'
- '^[a-z]{1,5}_.*log$'
官方文档:https://docs.ansible.com/ansible/2.9/modules/find_module.html#find-module